Comenzando con OpenGL cuando la mayoría de los tutoriales están desactualizados [cerrado]

16

Estoy seguro de que ya hay un montón de preguntas como esta, pero la actualización constante de la biblioteca OpenGL las descarta y, en un mes o dos, las respuestas serán inútiles nuevamente.

Estoy listo para comenzar a programar en OpenGL usando C ++. Tengo un compilador que funciona (DevCpp; NO me pidas que cambie a VC ++, y no me preguntes por qué). Ahora solo estoy buscando un tutorial sólido sobre cómo programar con OpenGL. Mi asistente encontró el tutorial proporcionado por NeHe Productions, pero como he descubierto, ¡está MUY FUERA DE FECHA! (aunque reuní una ventana básica para admitir un lienzo de OpenGL)

Luego me conecté en línea y encontré OpenGL SuperBible, que aparentemente usa freeglut. Pero lo que me gustaría saber es si SuperBible 5th edition está actualizada o no. La sugerencia de freeglut que encontré decía que la última versión era 2.6.0, ¡pero ahora es 2.8.0!

  • ¿OpenGL SuperBible sigue siendo un lugar bueno y bastante actualizado para comenzar?
  • ¿Hay un lugar mejor para aprender OpenGL?
  • ¿Se me permite simplemente almacenar freeglut en el directorio de inclusión de DevCpp (tal vez en GL), o hay algún procedimiento importante?
  • ¿Hay algún comentario o sugerencia que no haya pensado preguntar ya que recién estoy comenzando?

@dreta me aclaró algunas cosas, así que ahora tengo una mejor idea de qué preguntar:

Creo que me gustaría comenzar con OpenGL utilizando una biblioteca de contenedor en lugar de acceder directamente a OpenGL.
Solo creo que, para un principiante, sería más fácil para mí programar y obtener buenos resultados, aunque todavía no tengo que entender todos los detalles sucios (como mencionó @stephelton).

El problema es que no puedo encontrar ninguna biblioteca que no tenga referencias indefinidas a funciones que ya no son compatibles. Freeglut parece operativo, pero aún usa GLU.
¿Alguien sabe lo que puedo hacer?
Además, intenté compilar la primera fuente de SuperBible, pero obtuve errores ya que GLAPI no se define como un tipo, el error que se origina en la biblioteca GLU.

Me gustaría usar la SuperBible, pero no sé cómo solucionarlo.

Codesmith
fuente
2
Deberías cambiar a GCC.
notlesh
DevCpp es solo un IDE; que ejecuta GCC (mingw para ser específico). Pero desde que se mencionó, Eclipse CDT sería preferible, ya que no ha sido abandonware en los últimos 10 años.
Casper Beyer
44
@Casper El heredero del legado de DevCpp fue Code :: Blocks y todavía se actualiza regularmente.
Alex Shepard
1
Si desea una biblioteca de contenedor alrededor de OpenGL, le sugiero que pruebe SFML . SFML proporciona los elementos habituales, como la creación de ventanas, temporizadores, etc., al tiempo que le permite dibujar texto y formas simples. Puede dejar de ahogarse con OpenGL "sin procesar" cuando lo desee, mezclando funciones SFML y llamadas API sin procesar.
Oskar N.
1
No puede "cerrar" una pregunta agregando "{CERRADO}" al título. Los moderadores cerrarán las preguntas o si suficientes usuarios votaron para cerrar la pregunta. Voy a rodar sus ediciones de vuelta .. el "cerrado" automáticamente se añadirá a su título si moderadores deciden cerrarla ..
bummzack

Respuestas:

19

Nuestro residente Nicol Bolas mantiene un libro en línea sobre programación gráfica moderna . Utiliza OpenGL moderno, todo se presenta a un ritmo fácil de consumir, es un buen lugar para comenzar. Lo he estado usando para aprender OpenGL moderno y me ha estado haciendo maravillas en los últimos 2 meses.

Además de que hay fragmentos de conocimiento aquí y allá. El wiki de OpenGL está bastante bien mantenido. El código no es "mejores prácticas" y a veces hay ambigüedad cuando se trata de la versión OpenGL, pero fuera de esa rara ocasión, es un gran recurso.

Si desea aprender sobre GLSL, está el Tutorial básico de GLSL de lighthouse3D. Aunque este es el único conocimiento central en el que "confiaría" en el sitio, el resto tiende a estar desactualizado.

Una vez que empiece a comprender cómo se hace OpenGL moderno, le resultará fácil buscar información específica, filtrar el código desactualizado y, lo más importante, leer la especificación. Solo tienes que empezar por alguna parte.

La mayoría, si no todos, de los libros de OpenGL disponibles están desactualizados. El nuevo SuperBible es un fenómeno de algún tipo y no se lo recomendaría a nadie. La Guía de programación de OpenGL para OpenGL 4.1 sale el 16 de septiembre, desafortunadamente la séptima edición usa código obsoleto, así que solo tienes que esperar, estoy seguro.

Y por supuesto, siempre puedes hacer preguntas aquí.

dreta
fuente
1
¿Por qué no sugerirías la SuperBible?
Codesmith
3
@AUTO La quinta edición de SuperBible utiliza un contenedor personalizado alrededor de OpenGL para que sea "accesible". Muchos de los ejemplos usan el contenedor personalizado en exceso. No le enseña a qué se supone, que es la especificación central de OpenGL. A mi modo de ver, si no tienes que aprender explícitamente OpenGL en desuso, entonces olvida que incluso existe. No tiene sentido aprenderlo. La especificación central es mucho más clara y poderosa.
Dreta
@AUTO La especificación central es mucho más exigente al principio, eso es algo bueno. Te obligará a ocuparte de la mayor parte del proceso de renderizado, dándote una comprensión y un control completos sobre él. Abre muchas, muchas más posibilidades que el código obsoleto. Después de eso, si puedes aprender la API de tu sistema operativo y abrir OpenGL debajo de ella sin cosas como el exceso, entonces estás en el país de las maravillas.
Dreta
Bien, déjame hacerte una pregunta importante: la biblioteca GLU parece estar en desuso y no tiene soporte; Al usar la especificación, ¿obtengo acceso directo, evitando la necesidad de GLU? ¿De tal manera que no recibiría más errores de enlazador a funciones no existentes a las que hace referencia la biblioteca GLU?
Codesmith
@AUTO GLU es completamente innecesario, solo lo toqué con un poste de 10 pies durante la clase de programación de gráficos (tuvimos que usar un código obsoleto, fue doloroso, los estándares cambian más rápido que el programa de la lección, supongo). Es solo una biblioteca que ayuda con el código obsoleto. Si tiene su código configurado con GLU, probablemente apesta.
Dreta
1

Ha pasado un tiempo desde que se hizo esta pregunta, pero espero que esto ayude a las personas que tienen la misma pregunta que usted.

Comencé con OpenGL leyendo un minibook arcsynthesis.org. No estoy seguro de quién lo escribió. Parece que el registro del sitio ha caducado o algo así, pero debería poder encontrarlo aquí: http://web.archive.org/web/20140209181347/http://www.arcsynthesis.org/gltut/ . Utiliza OpenGL 3.3, por lo que utilizará la canalización moderna y todas las prácticas que conlleva, pero no estará expuesto a la teselación o sombreadores informáticos.

Otro sitio que vale la pena mirar es https://open.gl/ . Parece estar MUY enfocado en principiantes y no cubre cosas tan profundas como el material anterior, pero podría ser un buen punto de partida para las personas que recién comienzan.

Recuerde leer el wiki de OpenGL y google sus nombres de funciones si necesita ayuda. Algunas de las páginas de la wiki son completamente inútiles, pero otras son bastante útiles, tanto como referencia como material de aprendizaje.

Condimento
fuente
1
La persona mencionada en la respuesta aceptada lo escribió Nicol Bolas - gamedev.stackexchange.com/users/8240/nicol-bolas
Jesse Dorsey
0

Estos antiguos tutoriales siguen siendo muy relevantes para los principiantes. De hecho, sugeriría comenzar allí en lugar de hacerlo con versiones recientes de OpenGL. Las versiones más recientes han descartado algunos de los métodos más fáciles de dibujar geometría (es decir, dibujo en modo inmediato).

Con las versiones recientes, debe preparar y enviar matrices de vértices y decirle a la tarjeta de video cómo se organizan sus vértices en la matriz que proporciona. Estas cosas son difíciles de depurar.

Algunas versiones (a saber, OpenGL ES 2.x) requieren que proporcione sus propias ecuaciones de iluminación (en forma de Fragment Shaders) y transforme sus propios datos de vértice para que terminen en la pantalla donde lo desee (Vertex Shaders). Esto es aún más difícil de depurar, y no es lugar para un principiante (en mi opinión).

Por lo tanto, sugeriría que vuelva a los tutoriales de NeHe (etc.) y comience allí. Pueden estar "desactualizados" pero aún funcionan. Cuando comience a comprender lo que realmente sucede en la canalización de renderizado en OpenGL y tenga una idea de algunos de los conceptos matemáticos que hacen que estas cosas funcionen, entonces estará listo para analizar algunos de los métodos más actualizados de renderizado en OpenGL.

notlesh
fuente
En realidad no funcionan. Por eso publiqué esta pregunta. Están utilizando la función gluPerspective, que está en desuso, y no existe un sustituto absoluto.
Codesmith
1
Esa no es una función OpenGL. Es una función de utilidad separada proporcionada por otra biblioteca. Puede encontrar el código fácilmente, no es muy difícil.
notlesh
Gracias, pero solo encontré un sustituto imperfecto que no sé cómo usar. Acepta un argumento "matriz flotante *", mientras que el anterior usa alguna matriz interna. ¿Qué pongo entonces?
Codesmith
El primer hit en google para la "implementación de gluPerspective" es exactamente lo que estás buscando. llama a glFrustum, que no está disponible en algunas versiones recientes de OpenGL (ES 2.x no lo incluye). Incluso eso no es demasiado difícil de encontrar para lo implícito.
notlesh
0

Como han dicho otros, la mayoría de los libros están en desuso o son demasiado avanzados. No obstante, recomendaría la quinta edición de SuperBible, pero solo para obtener una visión general rápida de lo que se puede hacer en OpenGL y familiarizarse con cosas como la vista / proyección, etc.

Inmersión inmediata en el OpenGL moderno posiblemente podría abrumarte al principio, así que considera aprender a hacer algunas cosas básicas en las versiones ahora obsoletas.

También me gustaría agregar un sitio con buenos tutoriales que he encontrado últimamente http://ogldev.atspace.co.uk/

Corazón triste
fuente
Gracias, revisaré ese tutorial; pero para usar OpenGL SuperBible, mi pregunta sigue siendo: ¿Cómo reparo GLU, ya que freeglut se basa en él?
Codesmith
@AUTO: FreeGLUT no está "basado en" GLU. Algunas funciones de FreeGLUT llaman a GLU, pero si no llama a esas funciones, no tendrá ningún problema.
Nicol Bolas
Pero, ¿no es probable que SuperBible llame a estas funciones? Y si lo hace, yo no puedo usar es .
Codesmith
Realmente, mi opinión es no molestarme con el código fuente provisto con la SuperBible. Léalo pero trate de hacer todo desde cero. En sus problemas con GLU, mi mejor conjetura es que no ha configurado / instalado sus bibliotecas correctamente. Descargue la última versión de MinGW. Descargue también la última versión de freeglut y compílelo, o busque una biblioteca precompilada. De todos modos, debe comenzar a aprender algunas cosas en lugar de dedicar tanto tiempo a planificar cómo comenzar.
Grieverheart
@AUTO: ¿Por qué es probable que la SuperBible los llame? Si los llamara, el código de SuperBible no funcionaría. Por eso no los llama.
Nicol Bolas
0

arcsynthesis.org (el sitio mencionado en la respuesta aceptada) parece estar fuera de servicio, desafortunadamente. (EDITAR: ¡está disponible en este enlace !).

Los tutoriales de Anton Gerdelan para OpenGL 4 son muy legibles y están actualizados a mediados de 2014. Los primeros son gratuitos, el resto están disponibles en Amazon, donde tienen excelentes críticas, por un pequeño precio. Hasta ahora he estado satisfecho.

Hay algunos tutoriales más gratuitos para OpenGL 3.3+ en http://www.opengl-tutorial.org/ . Se remontan a 2012, pero pueden ser un buen material complementario para otras fuentes.

iHateCamelCase
fuente
OGLDev is current, in depth, and free. ogldev.atspace.co.uk/index.html
Yattabyte
cough
Nicol Bolas
Great to see it is available! I'll check out these materials also.
iHateCamelCase