Hay muchas cosas de las que puedes aprender. Aquí está mi pensamiento sobre cada uno, desde la perspectiva de alguien nuevo en OpenGL.
Ejemplos de OpenGL
Hay muchos códigos de ejemplo que puedes leer. Los ejemplos de G-truc son bastante extensos y cubren muchas características avanzadas.
Sin embargo, si eres un principiante , aprender de los ejemplos es una forma terrible de aprender. Leer códigos que realmente no entiendes no te enseñará por qué funciona. De hecho, el texto en la página vinculada anterior indica de manera específica y correcta que los ejemplos no son para principiantes.
Aprender del código fuente simple, a menos que esté muy comentado (en este punto es un tutorial) no es una cosa fácil. Intentar hacerlo fomenta la programación de estilo de culto de carga y la codificación de copiar y pegar. Es muy fácil convencerse de que comprende cómo funciona algo cuando todo lo que realmente está haciendo es copiar el código de un lugar a otro. Es posible que pueda mezclar y combinar cosas, pero la verdadera comprensión es difícil de lograr sin el material de instrucción adecuado.
Libros OpenGL
Hay una buena cantidad de libros adquiribles reales para el desarrollo de OpenGL. Cubriré mis pensamientos sobre los dos más grandes aquí.
OpenGL Redbook
Este es algo problemático desde un punto de vista puramente práctico. Ver, la séptima edición cubre GL 3.0 y 3.1. Lo cual es bastante viejo. Ha habido una gran cantidad de características útiles añadidos a OpenGL, desde entonces, características que cambian la forma como se escribirían cosas. Y no todos son características de hardware.
La octava edición llegará "pronto" y cubrirá 4.1. No se sabe si cubre cosas viejas de funciones fijas.
Yo diría que este libro está bien. El mayor problema es la organización de la información. Es más como un manual de referencia integral que un libro hecho para aprender. Esto es lo que quiero decir.
Una de las cosas más importantes que se deben hacer cuando se enseña es no sobrecargar al estudiante con información sin importancia. Pero el Redbook hace exactamente eso. Al introducir material, introduce mucho material. Gran parte de ello es superfluo para la tarea en cuestión.
De qué hablas y cuándo lo haces son cruciales para hacer de tu libro un buen recurso de aprendizaje. El Redbook nunca retiene información hasta un momento más apropiado. Cuando habla de cómo dibujar triángulos y primitivas, habla de todo sobre dibujarlos, todo a la vez. Cubre cada opción, cada función, cada parámetro, etc.
Eso no es una buena organización de información.
OpenGL Superbible
La quinta edición de este libro cubre solo el núcleo GL 3.x, por lo que no tiene una función fija.
Sin embargo, la organización general del libro es más o menos idéntica a la organización de la versión de la cuarta edición. Esto parece imposible ya que la 4a edición usó la función fija y no introdujo sombreadores hasta mucho más tarde.
La forma en que esto se logró es mi queja número 1 sobre el libro. Esencialmente, el autor construyó una biblioteca que implementa una forma de OpenGL de función fija. Envuelve VAO, objetos de amortiguación, sombreadores y varias otras cosas, para que pueda llegar a dibujar objetos, matemática matricial y texturas sin tener que hablar sobre cosas como el funcionamiento de la tubería GL en detalle.
Al ocultar todos estos detalles, hace que el material sea más fácil de digerir. Pero a menudo verá personas alejándose de la Superbible sin saber cómo funcionar realmente sin la biblioteca. Realmente no entienden cómo los sombreadores se conectan a los objetos del búfer, cómo fluyen los datos por la tubería, etc.
Es un libro útil, más que el Redbook. Si todo lo demás falla, hará el trabajo. Pero creo que podría ser mejor.
Además, según algunos revisores, parece perderse cierta información útil, como empaquetar datos de atributos con valores normalizados y demás.
Materiales en línea de OpenGL
Hay muchos materiales en línea de los que uno podría aprender.
Tutoriales de NeHe
Los tutoriales de NeHe , como han dicho otros, están extremadamente desactualizados. Se centran en la función fija OpenGL. A menudo se dice que es fácil aprender GL de función fija, lo cual es cierto. Pero eso no lo convierte en una buena idea.
Comprender cómo funciona realmente la canalización de funciones fijas es difícil. Me atrevería a decir que es más difícil que aprender sombreadores. Una vez que lo obtienes, los sombreadores son simples. Comprender las complejidades de las cosas del entorno de texturas, los combinadores y demás, es muy complicado y requiere visitas frecuentes a documentos de referencia para asegurarse de que todo esté configurado correctamente. Incluso si comprende todo correctamente, es fácil cometer un pequeño error que hace que todo se rompa.
La diferencia es que puede hacer que la función fija funcione sin comprenderla. Esto fomenta la programación de culto de carga. Permite obtener algo en la pantalla sin saber realmente lo que se está haciendo. En los foros de OpenGL.org, vemos preguntas constantemente sobre minucias que rodean la función fija, desde personas que no saben cómo funciona gluLookAt, hasta dificultades con la iluminación, hasta personas que intentan obtener un efecto particular para trabajar con el entorno de textura.
Entonces no, no creo que NeHe sea una buena forma de aprender OpenGL.
El comentario anterior se puede usar para cualquier tutorial no basado en sombreador, como Swiftless , Lighthouse , etc.
Programación OpenGL de Wikibook
La programación OpenGL de Wikibook es probablemente el equivalente moderno de NeHe. Cubre GL versión 2.1, porque quieren mantenerlo relevante para las plataformas móviles. Si eso es importante para ti, entonces, por supuesto, mira aquí.
El otro problema con NeHe, y por lo tanto este Wikibook, es el gran enfoque en el código fuente. La relación de texto a código es muy pequeña; hay mucho código, pero el texto realmente no explica cómo funciona todo.
Como ejemplo, mire la parte inferior del Tutorial 2. Introduce la fusión. No dice cómo funciona la mezcla. No dice lo que glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
realmente significa o hace. Simplemente dice: "Aquí hay un código que hace que las cosas sean transparentes".
Ese no es el mejor ambiente de aprendizaje.
Tutoriales incompletos
Swiftless tiene un conjunto de tutoriales 4.x OpenGL . Durian Software también tiene algunos tutoriales OpenGL basados en sombreadores . Y están los tutoriales de "OpenGLBook.com" .
Lo que todos tienen en común es ... que están incompletos y abandonados. Todos recibieron entre 4 y 5 tutoriales y luego fueron descartados. Ninguno de ellos alcanzó texturas, iluminación, ni nada de eso. Bueno, Durian golpeó texturizar pero no iluminar.
Se les puede alegrar mucho, pero también falta mucho.
Auto-promoción descarada
Revisar mis propios tutoriales de Modern 3D Graphics sería un horrible conflicto de intereses. Entonces, en lugar de eso, me detendré extensamente sobre la organización detrás de ellos y por qué creo que son buenos.
Ah, sí, estoy trabajando en el Tutorial 17. El proyecto no está muerto.
Los primeros tres capítulos tratan realmente sobre cómo funciona la canalización de OpenGL. El Superbible falló porque trató de ocultar detalles. En cambio, intento explicar esos detalles muy, muy bien. Repetidamente. La introducción explica la canalización en texto plano. El primer tutorial lo explica con el acompañamiento de código. Y el segundo tutorial lo visita aún más.
A partir de ahí, naturalmente paso a posicionar objetos. Esto introduce uniformes, pero no quería ponerme uniformes y proyecciones en perspectiva al mismo tiempo. Entonces separé los dos conceptos. Después de la proyección, la amortiguación de profundidad parecía un siguiente paso razonable, seguido de cómo funcionan las transformaciones y las matrices. Después de eso, cámaras. La rotación con cuaterniones fue una adición tardía, pero creo que fue algo importante para el programador de gráficos en ciernes.
Los tutoriales de iluminación nuevamente construyen uno sobre el otro. Difusa, luego iluminación por fragmento, luego especular. El rango dinámico fue una elección interesante. La mayoría del material introductorio trata de mantenerse alejado de eso, pero lo acepto. No eres un programador de gráficos en estos días si crees que la intensidad de la luz siempre está en el rango [0, 1]. Y no eres un programador de gráficos en estos días si no sabes cómo mantener una tubería de color lineal.
El último en iluminación, sobre impostores, fue extraño. Intento diseñar tutoriales que resuelvan problemas en lugar de mostrar algunas funciones de OpenGL, especialmente a medida que avanza el libro. Gran parte del diseño de mi tutorial proviene de encontrar formas de hablar sobre ciertos temas y al mismo tiempo convertirlos en problemas reales y no obvios, "estamos aprendiendo X ahora". Los sombreadores de geometría son difíciles, porque en realidad no resuelven muchos problemas.
Los impostores representaban un problema que los GS realmente eran útiles para resolver. Además, me permitió hablar sobre otras cosas menos utilizadas, como discard
cambiar la profundidad de un fragmento. Y realmente muestra el poder de los sombreadores: puedes hacer que un cuadrado plano se convierta en una esfera.
Los tutoriales de texturizado también son interesantes. Una de las razones por las que pospuse hablar sobre texturas de color difusas hasta la tercera fue dejar de hablar sobre texturas sRGB por un tiempo. De esta manera, podría hablar sobre los problemas básicos relacionados con las texturas (cargar datos, ponerlos en sombreadores, filtrar, sujetar, etc.) sin tener que lidiar con problemas lineales. Entonces podría pasar un tutorial completo sobre ese tema. Eso me permitió realmente enfatizar lo importante que es mantener una tubería de color lineal.
Es una de mis manías.