¿Buenos recursos para aprender OpenGL moderno (3.0 o posterior)? [cerrado]

73

Me topé con la búsqueda de un buen recurso para comenzar con OpenGL (3.0 o posterior). Bueno, encontré muchos libros, ¡pero ninguno de ellos puede considerarse un buen recurso!

Aquí dos ejemplos:

Guía de programación de OpenGL (7ª edición) http://www.amazon.com/exec/obidos/ASIN/0321552628/khongrou-20 ¡ Esto está LLENO de material obsoleto! Casi todos los capítulos comienzan con una nota al respecto.

OpenGL Superbible (5a edición) http://www.amazon.com/exec/obidos/ASIN/0321712617/khongrou-20 ¡ Este libro usa una biblioteca creada por el autor para explicar los argumentos principales, ocultando lo que quieres aprender! ¡No quiero aprender a usar tu biblioteca! ¡Quiero aprender OpenGL!

Espero que entiendas que esta no es la misma pregunta como "oye, no puedo usar Google ... dime cómo aprender OpenGL". Acabo de terminar una búsqueda completa y profunda, pero no puedo encontrar un recurso bueno y completo para aprender el "nuevo" OpenGL evitando temas obsoletos.

¿Alguien puede dirigirme en la dirección correcta? Sé C ++ y tengo 10 años de experiencia en desarrollo ... ¡¿dónde puedo encontrar un buen recurso ?! Quiero pasar tiempo en eso y quiero aprender profundamente.

MatterGoal
fuente

Respuestas:

69

Estoy de acuerdo con los libros anteriores con algunas notas:

  • La octava guía de programación OpenGL ya está disponible y se ha renovado para el OpenGL 4.3 moderno.

  • SuperBible 5th ed, le proporciona una biblioteca de muletas para comenzar, pero a medida que avanza en el libro, vuelve a implementar la funcionalidad de esa biblioteca, por lo que al final de la misma debería estar completamente versado. También recomiendo encarecidamente envolver cosas de OpenGL en algo si está utilizando un lenguaje orientado a objetos. Estoy trabajando en mi propia biblioteca por diversión, que parece ser el camino a seguir, implementándola yo mismo, entiendo todos los entresijos y solo necesito poner los bits que realmente uso. También puede abstraer algunas cosas, como enviar datos a los sombreadores (no es shinyMaterial.setColor (Red) mucho más agradable), esto también puede permitirle respaldar algunas cosas al proporcionar alternativas heredadas. También hay oglplus .

El principal problema con el aprendizaje de OpenGL 'core' moderno es que para obtener una tubería básica en funcionamiento, incluso si es solo para dibujar un cubo, debe comprender lo siguiente:

  • Operaciones de matriz (use GLM si está en C ++, también necesitará una versión de SDK no oficial de MatrixStack OpenGL aquí , o una simple aquí ).
  • Programación de sombreadores GLSL.
  • enlazar datos a sombreadores y objetos de búfer de vértices. Si quisieras aprender solo un perfil de núcleo puro real, todos tendrían que implementarse simultáneamente y si algo se rompe, simplemente no verás nada y casi no tienes idea de dónde salió mal. Eso tampoco cubre cosas como la iluminación básica (donde necesita aprender los algoritmos de sombreado además del lenguaje de programación).

Pero no necesita comenzar en la profundización con el perfil central. Use algunas de las funcionalidades obsoletas al principio, casi todo seguirá siendo compatible, luego modernícelo.

Otro problema es que OpenGL 'moderno' realmente puede referirse a 3 cosas:

  • El primero es la tubería programable del sombreador en lugar de la tubería de función fija. Las técnicas 'modernas' centrales han sido posibles desde que se lanzó OpenGL 2.0 en 2004 cuando se introdujeron los sombreadores (los tutoriales simplemente no se actualizaron) y 1.5 tenían Vertex Buffer Objects, que son otra piedra angular de OpenGL moderno. Un problema es que incluso hoy en día los desarrolladores de OpenGL quizás ni siquiera puedan aprovechar todo eso, hay muchas netbooks basura con esos chipsets Intel que solo admiten OpenGL 1.5 y teléfonos como iPhones / Android más antiguos que solo admiten OpenGL ES 1.1. La única diferencia real entre estas cosas en OpenGL 2.0 y OpenGL 3.x / 4.x es que ahora es obligatorio para el perfil central.

  • OpenGL moderno también podría referirse a las nuevas cosas que están en 3.x, 4.x. Cosas como Vertex Array Objects , Framebuffer Objects , Uniform Buffer Objects / std140 , calificadores de diseño , subrutinas GLSLy así. Muchos de los que he encontrado pueden hacer que las cosas sean mucho más agradables para programar. También pueden cambiar sutilmente las tuberías generales del motor. También son cosas que con un poco de esfuerzo puede hacer backport haciendo funciones auxiliares y así sucesivamente (por ejemplo, escriba un objeto genérico de administrador de sombreadores que pueda usar para establecer uniformes, si se admiten UBO, use la carga de los valores en sombreadores manualmente) , quizás poner un poco de sombreador reescribiendo cosas allí para automatizarlo). Este material solo se ejecuta en tarjetas de video nuevas, no verá ningún netbook que lo admita ni ninguna consola de videojuegos de la generación actual (usan su propio subconjunto de OpenGL similar a OpenGL ES). El último OSX solo tiene 3.

  • El ultra moderno nextgen OpenGL. OpenGL 4.3 acaba de ser lanzado. Viene con sombreadores informáticos, glMultiDrawElementsIndirect y almacenamientos intermedios de sombreadores. Esto permite una canalización fundamentalmente diferente donde carga todos los datos de vértices a la GPU y luego usa sombreadores de cálculo para calcular lo que se debe dibujar en lugar de hacerlo en su programa. Desafortunadamente, esto es muy nuevo, así que no conozco ningún tutorial decente sobre él. Eche un vistazo a la revisión de OpenGL 4.3 que ofrece un resumen de cómo funciona esto (también el autor dice que se publicará un artículo de GPU Pro que lo explica). Al ser completamente nuevo, no será compatible en ninguna parte en esta etapa (a menos que esté en una tarjeta nvidia más nueva con controladores beta). Aunque es posible que pueda usar OpenCL / CUDA para implementar algunos de ellos.

Me saltaría glBegin, glEnd, glVertex *, glNormal *, glTextCoord *, glTranslate *, glRotate *, glLoadIdenity, glModelViewMatrix y así sucesivamente. En su lugar, comience por aprender los objetos Vertex Buffer sin sombreadores, no intente 3D en este punto solo un triángulo blanco plano para que no tenga que trabajar con operaciones 3D utilizando matrices (ya que necesitará aprender a unirlos a los sombreadores pronto, así que no tiene sentido aprender a la vieja usanza). A continuación, agregue los sombreadores, tendrá que cambiar la forma en que se enlazan los objetos del búfer de vértices, ya que ahora querrá usar los atributos de vértices. Aprenda a comunicarles propiedades a través de uniformes. Luego, aprenda las operaciones matriciales con GLM, enlace las matrices a los sombreadores y ponga en funcionamiento 3D. Una vez que hayas hecho eso, básicamente solo aprenderás cosas más avanzadas como texturizar,

Algunos tutoriales generales en línea de OpenGL modernos, que cubren la línea de programación de sombreadores que la mayoría de los cuales funciona con OpenGL 2.0+:

Para otros recursos generales de aprendizaje. OpenGL ES podría ser un buen punto de partida. OpenGL ES ha eliminado todas las cosas en desuso. OpenGL 4.1 tiene compatibilidad total con OpenGL ES, por lo que debería ser posible tomar un programa OpenGL ES y ejecutarlo en OpenGL 4.1. Y los principios básicos son los mismos para ambos.

Algunas cosas a tener en cuenta es que OpenGL ES 3.0 acaba de ser lanzado, pero como es nuevo, todavía no tendrá ningún tutorial o soporte de hardware. No parece tener ningún cambio fundamental importante (como la diferencia entre la tubería fija y el modelo de sombreador que vimos con OpenGL ES 1.0-> 2.0). Por lo tanto, es probable que no aprendas nada desactualizado.

Además, OpenGL ES a menudo usará EGL, por lo que deberá aprender otra forma de abrir una ventana, pero eso no debería ser demasiado difícil. De lo contrario, hay algunos envoltorios / emuladores de OpenGL ES o puede aprender en Android / iPhone si tiene uno (o ver cómo usar sus emuladores).

Existe la Guía de programación Addison Wesley OpenGL ES 2.0, que es el equivalente del libro rojo.

También puede ver cosas enfocadas en sombreadores GLSL, ya que es donde vive la mayoría de los OpenGL modernos. Solo necesita asegurarse de que lo que aprende cubra el lado 'pegamento' vinculante de OpenGL de las cosas.

Echa un vistazo a OpenGL Shading Language 2nd edition (Orange Book).

El libro de cocina del lenguaje de sombreado OpenGL 4.0 cubre algunas cosas más innovadoras de OpenGL, pero no es en sí mismo un tutorial completo. Definitivamente vale la pena echarle un vistazo para comprender algo sobre las últimas prácticas de OpenGL del mundo real, como los objetos de almacenamiento intermedio uniformes y las subrutinas GLSL.

Finalmente, podría echar un vistazo a WebGL, aunque estar en JavaScript será algo diferente y mucho más difícil de depurar.

David C. Bishop
fuente
3
+1, guau. El único pequeño cambio que sugeriría sería usar matrices de vértices del lado del cliente al principio, ya que son un camino más fácil a los VBO pero sin algunas de las trampas de oso en las que los principiantes pueden caer.
Maximus Minimus
1
Pensé que era mejor evitar específicamente aprender / usar una funcionalidad obsoleta ya que eso sería algo que tendría que ser ignorado. Las otras cosas obsoletas que sugiero usar son cosas que OpenGL hará de forma predeterminada, como poder renderizar sin usar un sombreador y asumir que el atributo de vértice 0 es la posición que ambos deberían explotar al encender el perfil central.
David C. Bishop
2
La sexta edición de SuperBible acaba de ser lanzada y es MUCHO mejor que la quinta edición. Lo recomiendo muchísimo, es fácil seguir y aprender OpenGL moderno con.
Philip
2
El sitio de Arcsynthesis gltut ya no está disponible, pero el tutorial aún se puede descargar desde bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken
15

Olvídate de los libros al menos hasta que salga la octava edición de la guía de programación.

Además del tutorial mencionado , encontré que este sitio es útil, ya que pasa lo básico con bastante rapidez. Ambos son una gran introducción al moderno OpenGL. Una vez que pase eso, solo necesitará la documentación, OpenGL es fácil de usar una vez que se acostumbra. El resto es teoría de gráficos por computadora y matemáticas.

dreta
fuente
11

He estado exactamente en la misma situación que tú y finalmente he encontrado lo que necesitaba para ponerme en marcha.

Primero fuera de la cabeza aquí: http://www.arcsynthesis.org/gltut/ . Este sitio es fantástico, buenos ejemplos de trabajo y una explicación profunda de lo que está sucediendo. Aunque el código está escrito en C ++, estoy usando esto para enseñarme a escribir demostraciones de OpenGL en Lisp. También es totalmente libre de la antigua forma de hacer las cosas, por lo que no tiene que preocuparse por adquirir malos hábitos.

Quisiera enfatizar que a pesar de que es 'solo otro sitio web', no he encontrado ningún libro que dé una explicación tan clara y concisa de los conceptos básicos como lo hace.

Una vez que haya pasado por el sitio anterior, ya tendrá una comprensión básica de los sombreadores y mucho de lo que necesita saber ahora puede buscarse en Google (eche un vistazo a las operaciones o recursos webgl ya que eliminaron todas las cosas obsoletas) o encontrado en el sitio wiki de opengl. El último es terriblemente críptico si no tienes los fundamentos del sitio de arcosíntesis bajo tu cinturón, pero es bastante útil cuando sabes más o menos lo que estás buscando.

También para una mirada más profunda a GLSL, eche un vistazo a: OpenGL Shader Language (El Libro Naranja) Estoy trabajando en esto muy lentamente, pero le daré la comprensión de la escritura de sombreadores para permitirle llevar esta búsqueda más allá. Te advierto que este libro tiene, en palabras de un crítico, "200 páginas de contenido de alta calidad en un libro de 600 páginas", pero la historia y la información adicionales pueden proporcionar el contexto que necesitas para comprender las rutas que OpenGL como un estándar ha caído (¡bueno, de todos modos me está ayudando!)

Espero que esto ayude y la mejor de las suertes, ¡espero ver / jugar tu trabajo en el futuro!

ACTUALIZAR

Parece que la arcosíntesis está tristemente fuera de línea, sin embargo, el sitio se ha convertido a pdf aquí y el código se ha reflejado aquí .

También en los pocos años transcurridos desde mi respuesta original learnopengl.com/ se ha vuelto absolutamente brillante. Si bien sigo recomendando la arcosíntesis por la cruda excelencia de su introducción al opengl moderno, el sitio de aprendizaje cubre mucho más que la arcosíntesis, y lo maneja con un lenguaje accesible, creamos ejemplos y código fuente abierto. Básicamente, es muy bueno, ¡échale un vistazo!

Con respecto a los libros, no llegué demasiado lejos con el libro naranja, pero puedo recomendar la tercera edición de 'Real-Time Rendering' . Una vez que esté listo para las cosas técnicas, este libro es una mina de oro.

Ensacadoras
fuente
2
¡DIOS MIO! ¡El primer enlace es fantástico!
MatterGoal
El sitio gltut ya no está disponible, pero el tutorial aún se puede descargar desde bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken
Buen punto, actualizaré mi publicación con recomendaciones adicionales también.
Baggers
8

También puedes ver Open.gl . Tiene tutoriales que usan Open GL moderno

anirudhrata
fuente
5

Dos sitios que me han sido muy útiles son: http://www.arcsynthesis.org/gltut/ y http://ogldev.atspace.co.uk/

Además, el wiki de OpenGL es un recurso extremadamente bueno y actualizado.

Una vez que los supere, le recomiendo morder la viñeta y leer la especificación OpenGL. Entonces serás un profesional.

Sean
fuente
Sí, creo que los tutoriales en línea son mucho más útiles que la mayoría de los libros. La 5ta edición de SuperBible es extremadamente decepcionante.
Philip
El sitio gltut ya no está disponible, pero el tutorial aún se puede descargar desde bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken
4

El mejor libro que he encontrado que cubre OpenGL "moderno" es http://www.packtpub.com/opengl-4-0-shading-language-cookbook/book

Aunque es un "libro de cocina", le guía a través de los pasos necesarios para configurar el renderizado y qué tipos de bibliotecas complementarias necesitará (lib de imagen, lib de matemática vectorial).

Además de eso, pasa por todo tipo de cosas comunes para las que puede que desee usar OpenGL, sin profundizar demasiado en nada (como sombras, cubre el mapeo de sombras y el filtrado de mapas de sombras, pero no entra en ninguno de los más métodos complejos de mapeo de sombras).

También recomiendo conseguir el libro naranja.

Jari Komppa
fuente
Gracias @Jari. ¿No es "solo" sobre el sombreador? Quiero decir, ¿este libro presenta técnicas de OpenGL y sombreadores?
MatterGoal
2
@MatterGoal: OpenGL moderno está casi completamente basado en sombreadores. Este libro cubre el lado vinculante de OpenGL de las cosas. También recomiendo este libro, pero como compañero de otra cosa, no es realmente para el libro de aprendizaje básico, pero muestra algunos usos geniales en el mundo real de las prácticas moddrn.
David C. Bishop