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)?
Respuestas:
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
fuente
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.
fuente
preamake
etapa 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..Recomendaría comenzar con esta serie de tutoriales, son buenos y usan características más modernas que las http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html
fuente
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!
fuente
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.
fuente
Aquí hay otro. Es muy bueno. Aunque solo tiene 4 capítulos.
http://openglbook.com/
Otro es, http://www.arcsynthesis.org/gltut/ . Este es enorme, lento y de alto perfil.
No olvides rastrear el http://www.opengl.org/wiki/Getting_started
fuente
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:
Esto ya es mucho trabajo.
fuente
Aprendí opengl escribiendo un juego "simple": ¡ Tetris 3D !
Intenta crear tu propio juego / aplicación simple:
¡Haz algo simple que te interese!
fuente
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
fuente
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.
fuente
No diría que esta serie de tutoriales en video es la mejor manera, pero está muy bien explicada: www.71squared.com/2009/03/iphone-game-programming-tutorial-1
fuente
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
fuente
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.
fuente
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.
fuente
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 ...
fuente