¿Cuáles son algunos buenos recursos de aprendizaje para OpenGL? [cerrado]

88

He estado usando OpenGL ES en el iPhone por un tiempo y básicamente me siento bastante perdido fuera del pequeño conjunto de comandos que he visto en ejemplos y que he adoptado como propio. Me encantaría usar OpenGL en otras plataformas y entenderlo bien.

Cada vez que busco un libro, encuentro estas ENORMES biblias que parecen poco interesantes y muy difíciles para un principiante. Si tuviera un par de fines de semana para aprender OpenGL, ¿cuál sería la mejor manera de gastar mi tiempo (y dinero)?

DFectuoso
fuente
12
Odio decirlo, pero OpenGL Superbible o OpenGL redbook son la mejor manera de aprender OpenGL. Es un tema complejo, por lo que el libro debe ser grande.
Rachel Blum
66
¿Es accesible incluso para un novato?
DFectuoso

Respuestas:

36

Tenga cuidado cuando mire los tutoriales de OpenGL, porque muchos de ellos (NeHe) incluidos simplemente le enseñan cosas que ya no debería hacer. Hoy OpenGL es una bestia diferente a la que era hace 10 años.

Algunos buenos ejemplos que evitan las cosas obsoletas se pueden encontrar aquí: http://www.g-truc.net/post-tech-content-sample.html

OpenGL Samples Pack 4.0.1.0 es una actualización que eleva el número de muestras a un total de 58 muestras; incluyendo 13 muestras OpenGL 4, 33 muestras OpenGL 3.3 y 12 muestras OpenGL 2 para Visual Studio 2008 y 2010 en 32 y 64 bits.

NocturnDragon
fuente
Se une a una montaña!
user14170
65

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 discardcambiar 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.

Nicol Bolas
fuente
1
Acabo de comenzar a leer su libro / código fuente, y es increíble ... ¡muchas gracias por publicar esto gratis!
Alex Coplan
Aunque soy un tipo de telecomunicaciones, simplemente estaba probando sus tutoriales. Y son realmente agradables para un novato. Lo único es que, opengl sdk no oficial no se puede construir correctamente con Ubuntu12.04 + Eclipse. ¿Hay alguna manera de instalarlo directamente? (Como lo hacemos para GL, GLEW, GLU, glut, etc.)
iammilind
@iammilind: " no se puede construir correctamente " ¿Cómo falla la compilación? Además, no hay "instalación"; Eso es la mitad del punto. Es un mecanismo de copia / premake / run sin ninguna instalación del sistema, dependencias, PPM o cualquier otra cantidad de cosas que no entiendo o no tengo idea de cómo usar en Linux. Lo pones donde quieres, no donde tu sistema cree que debería ir.
Nicol Bolas
1
En Ubuntu, desafortunadamente el proceso de compilación falla en la preamakeetapa en sí :( ... Será de gran ayuda, si en su tiempo libre puede intentar ejecutar sus tutoriales de código con Ubuntu + Eclipse. Por ahora, de la otra manera estoy siguiendo es utilizar el material de lectura que ya ha proporcionado y que se refieran a que algunos otros tutoriales de código la razón es que he visto "arcsynthesis" el mejor lugar para en la web hasta ahora para el aprendizaje novato OpenGL..
iammilind
@iammilind: Me di cuenta de que no presentaste un informe de error. ¿Cómo esperas que estas cosas se arreglen sin una?
Nicol Bolas
8

Mi único libro sobre OpenGL es "OpenGL SuperBible, 4ª edición" y está a punto de lanzarse en 5 semanas. Creo que es bueno tanto para principiantes como para programadores avanzados.

Editar: podría agregar que no elija las últimas tendencias tecnológicas si solo está aprendiendo a programar. Lo más probable es que una vez que se convierta en un experto utilizando una metodología, 5 nuevas interfaces / versiones recién lanzadas. Parece que hemos visto que los sombreadores avanzan cada 3 meses. Por lo tanto, elija la que tenga la mejor documentación (generalmente primitivas), cree algunos programas y avance gradualmente porque lo más probable es que se encuentre con un código anterior en el futuro. ¡Espero eso ayude!

Phil
fuente
Estoy revisando el excelente ahora y es realmente bueno para las personas que no tienen un fondo gráfico, ya que explica todos los conceptos a medida que avanza.
Spidey
5

Como de costumbre, la mejor manera de aprender es hacerlo. Esperaría gastar dinero a menos que sienta que realmente se beneficia de tener un libro de texto para leer, la mayoría (si no toda) la información se puede encontrar en línea. Además de aprender OpenGL, es posible que desee repasar su Álgebra lineal también, nunca está de más.

El gran problema que enfrenté es que muchas de las cosas que hay por ahí se han depurado en una versión reciente de OpenGL.

El mejor recurso que he podido encontrar ha sido en el Blog de Joe . Lo mejor es presentar la tubería moderna y obtener algunos ejemplos de una manera más legible que la que he podido encontrar en otros lugares. Parece que Nehe ha estado actualizando un par recientemente y aunque sus lecciones aún son antiguas, algunas de las noticias pueden ser de interés. Lazy Foo ' también fue un gran recurso, pero al igual que Nehe, sus tutoriales usan material depurado.

Creo que después de un fin de semana o 2, una vez que te sientas cómodo, ve y haz un pequeño proyecto para aplicar todo. Breakout o tetris, algo en lo que puedes concentrarte en el código. Aprendes mucho más cuando sales y tratas de hacer un proyecto real, sin importar cuán simple sea.

revs cmjreyes
fuente
3

La mejor manera de aprender OpenGL es usarlo. Yo recomendaría escribir su propio motor. Esto puede parecer una tarea desalentadora, y lo es. Tu primer motor no será muy bueno, pero habrás aprendido mucho.

Básicamente: escriba un motor, úselo para un juego, descubra lo que no le gusta de él y vuelva a escribirlo. Sigue haciendo eso y mejorarás en OpenGL. :)

Que necesitarás:

  • Alguna forma de cargar modelos (.obj)
  • Alguna forma de cargar texturas
  • Iluminación, ya sea en la tubería de función fija o en un sombreador
  • Para cualquier escena un poco más compleja que una tetera en la pantalla, un gráfico de escena
  • Muchas herramientas pequeñas (clase de vector 3D, clase de cuaternión, clase de cámara, administrador de escena, etc.)

Esto ya es mucho trabajo.

knight666
fuente
¿Podría indicarme alguna documentación sobre la arquitectura básica o los componentes que debe tener un "primer motor"? Esto puede parecer realmente como una buena manera de conseguir mis manos sucias con Open GL ...
DFectuoso
44
-1 Escribir motores como una forma de entrar en gamedev no es muy bueno. No sabes qué poner en el motor, por ejemplo. scientificninja.com/blog/write-games-not-engines
El pato comunista el
@TheCommunistDuck SADLY, scientificninja ya no existe. enlace web.archive
bobobobo
2

Aprendí opengl escribiendo un juego "simple": ¡ Tetris 3D !

Intenta crear tu propio juego / aplicación simple:

  • Asteroides
  • Apestar
  • Desplazador lateral simple (puedes aprender a cargar modelos para el jugador / enemigos. ¿No tienes ninguno? Usa modelos Quake)
  • Generador de terreno 3d

¡Haz algo simple que te interese!

Bryan Denny
fuente
2

Hacemos algo de OpenGL (ES) en nuestro juego Orchard's Craps para iPhone, pero fue manejado por un programador con loca habilidad 3D. Entonces, debido a esto, he estado aprendiendo OpenGL (ES) para saber de qué estoy hablando y para poder codificar junto con el equipo.

Un sitio que encontré útil, con una serie de tutoriales, es el blog de Jeff LaMarche: http://iphonedevelopment.blogspot.com y aquí hay un enlace para sus publicaciones de OpenGL: http://iphonedevelopment.blogspot.com/2009/05/ opengl-es-from-ground-up-table-of.html

Y de OpenGL.org existen estos dos enlaces que son útiles: http://www.opengl.org/code/ y http://www.opengl.org/resources/features/

La mejor manera, se mencionó anteriormente varias veces. Salta y haz algo pequeño, eso es interesante, y avanza hacia arriba. Se trata de entender la escena, la cámara y los materiales (sombreadores). Una vez que entienda estos conceptos, puede comenzar a observar los motores de física, la detección de colisiones, los efectos de partículas y similares. Woot! (^_^)

Buena suerte con todos tus esfuerzos, Kevin

Kevin Bomberry
fuente
2

Bueno, nadie habló de la Guía de programación de OpenGL , no tengo esta edición en particular, pero las anteriores eran bastante buenas.

Frédérick Imbeault
fuente
1
Cuéntame más al respecto, por favor. Me pregunto cómo esto es mejor / diferente de la súper biblia y si vale la pena el tiempo que vale la pena leer libros tan grandes (sin ofender, pero si lleva más de 20 horas leer un libro, quiero estar seguro de que vale la pena =))
DFectuoso
2

http://www.opengl-tutorial.org/

Tiene tutoriales para OpenGL 'moderno' (núcleo 3.0 / 4.0, por ejemplo, no se enseñan cosas obsoletas (como glBegin / glEnd)). Aunque los tutoriales usan sombreadores, los conceptos básicos se explican en gran detalle, construyendo una base matemática sólida en el camino. El texto se completa con ejemplos de código * y visualizaciones útiles.

Los tutoriales intermedios cubren cosas como, por ejemplo, el uso de Quaternions o Lightmaps .

. * glm se usa como una biblioteca matemática

Exilyth
fuente
1

Solo tenga en cuenta que la mejor manera de aprender OpenGL está orientada a tareas . Intenta hacer algo (como agregar una función a tu juego) y luego busca lo que se requiere para hacerlo .

Los manuales y tutoriales son realmente aburridos sin un contexto más amplio, es decir, algo más allá del tutorial que desea lograr por su cuenta.

bobobobo
fuente
-1

Comience con NeHe para obtener rápidamente su primer triángulo en la pantalla. Realice algunos de los tutoriales para principiantes para comprender los conceptos básicos de la programación 3D. Si, como implica, menciona OpenGL ES, ya conoce los conceptos básicos de la programación 3D (qué son las matrices, para qué se usan, cómo se usan las diferentes matrices para proyectar vértices en la pantalla, qué son los vértices, etc.), entonces te sugiero que no pierdas el tiempo con NeHe en absoluto, porque podría ralentizarte (enseñándote cosas que tienes que "desaprender" más adelante).

Aparte de eso, estoy de acuerdo en que la mejor manera de aprenderlo es hacerlo. Un buen primer proyecto que no sea del mundo es un juego en 2D (o un motor de juego en 2D). El uso de OpenGL moderno para aplicaciones 2D puede enseñarle muchos de los conceptos relevantes (uso de búferes y sombreadores, por ejemplo), y será menos desalentador que un proyecto 3D. Luego, después, puede aplicar lo que aprendió al hacer una aplicación 3D.

Janis Kirsteins
fuente
NeHe está desactualizado. Además, aunque la creación de arte es más fácil y se trata principalmente de quads texturizados, hay muchos casos de esquina (por ejemplo, productos cruzados de vectores) que hacen que escribir un juego en 2D antes de escribir un juego en 3D sea más difícil. Sin embargo, los juegos con gráficos en 3D pero juegos en 2D (por ejemplo, Pong, Breakout, ...) pueden ser más fáciles que los juegos en 2D / 3D.
Exilyth
-4

Bueno, me han dicho una y otra vez que los tutoriales de Nehe son los mejores, ¡supongo que también se adaptarán a ti! http://nehe.gamedev.net/ Compré el libro rojo ...

gokoon
fuente
Esto parece un divertido conjunto de pequeños trozos de cero a un gran lugar, ¡gracias!
DFectuoso
2
Tengo que estar en total desacuerdo. Sí, los tutoriales de NeHe han estado allí durante mucho tiempo, pero nunca han tenido un estilo muy bueno y ya están bastante desactualizados.
Andreas
8
-1 Nehe está demasiado desactualizado.
Axel Gneiting
77
-1. ¡Aprendí todo tipo de cosas malas de nehe!
Gabriel Isenberg
-1. NeHe debe etiquetar sus tutoriales como obsoletos y obsoletos.
Quazi Irfan