No leí la OpenGL Super Bible, por lo que no puedo garantizar su eficacia, pero escribí un pequeño procesador de OpenGL con sombreado basado en la física en el pasado para aprender, presentando cosas como renderizado diferido y sombras.
Cuando aprendí, este tutorial me ayudó muchísimo, ya que explica muchos de los conceptos de los gráficos 3D y va más allá, hablando de cosas como la textura y la carga de objetos. Además, el manual de referencia de OpenGL describe cada función con gran detalle, y una hoja de referencia de OpenGL puede ayudarlo a ver las funciones disponibles y dónde se encuentran en la tubería de gráficos.
Sin embargo, lo que encontré es que la cantidad de funciones de OpenGL que necesita saber es muy limitada, y muchas solo se usan una o dos veces en todo el código, suponiendo que tenga un contenedor decente de alto nivel para abstraer la API de representación subyacente. Si bien OpenGL es de hecho una API de C, que se fusiona de manera más natural con C ++, probablemente no obtendrá mucho al cambiar a C ++ si sus características principales (administración manual de memoria, rendimiento, acceso directo a memoria, etc.) no le interesan. Java proporciona una compatibilidad bastante buena con OpenGL, y el OpenGL que aprende a través de Java puede transferirse directamente a cualquier otro idioma.
Quizás el principal inconveniente de aprender a través de Java es que muchos tutoriales gráficos enseñan a través de C o C ++. Sin embargo, si puede leer el código C ++, puede traducirse fácilmente a Java equivalente.
- ¿Qué libro de tu país deberían leer todos?
- ¿Existe un dibujo del embajador alemán Pourtales en lágrimas después de entregar una declaración de guerra al ministro ruso Sazonov?
- ¿Cuándo leíste por primera vez los libros de Harry Potter?
- ¿Quién ganará en una pelea entre Ser Arthur Dayne y la montaña?
- ¿Es el séptimo libro de Moisés mágicamente poderoso como algunos afirman?
Sin embargo, después de aprender los conceptos básicos de OpenGL, el lenguaje de programación que usa se vuelve mucho menos relevante. Empiezas a aprender más sobre sombreadores, que están escritos en GLSL, sobre conceptos gráficos que no solo son independientes del idioma, sino que a menudo son independientes de la API (como Antialiasing, Texture Filtering, MipMapping, shadows, etc.), y bastante rápido ya no es la API de gráficos que se vuelve desafiante, pero los conceptos de alto nivel a los que desea aplicarlos (“ Conozco las funciones para crear un framebuffer, pero ¿cómo combino esto para crear un gbuffer con renderizado diferido y variedad de materiales?”).
Para aprender estos conceptos, aproveché mi experiencia mientras trabajaba en motores de juego de alto nivel (como Unity y Unreal), que hacen un gran trabajo al presentarle los elementos necesarios para crear una experiencia visualmente creíble. Una vez que supe qué elementos quería implementar, descubrí que Internet contiene una gran cantidad de información gratuita sobre cómo implementar estos conceptos y cómo funcionan.
De todos modos, si bien esto no respondió directamente a la pregunta, espero que al menos sea un poco útil 🙂