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.