c++ - español - Aprendiendo OpenGL moderno
opengl en codeblocks (6)
Soy consciente de que hubo preguntas similares en los últimos años, pero después de hacer algunas investigaciones todavía no puedo decidir de dónde y qué debo aprender. También me gustaría ver su visión actual y actual de la programación moderna de OpenGL con más C ++ OOP y enfoque de sombreado. Y asegúrese de que mi comprensión real sobre algunas cosas sea válida.
Entonces ... actualmente tenemos OpenGL 4.2, que cuando leo en alguna parte requiere hardware dx11 (¿qué significa?) Y un conjunto de librerías "laterales", por ejemplo, crear ventana.
Existe el GLUT más común, que odio muchísimo. Una de las principales razones son las llamadas a funciones, que no permiten la libertad en la forma en que creamos el ciclo principal. Como algunas personas decían, no era para juegos.
También hay GLFW, que en realidad es bastante agradable y directo para mí. Por alguna razón, la gente lo usa con GLUT. (¿Qué proporciona no solo la inicialización de la ventana, sino también otras utilidades?)
Y también hay SFML y SDL (SDL <SFML imo), mientras que a veces ambos necesitan un enfoque extraño para trabajar con OGL y en algunos casos no son realmente rápidos.
Y también tenemos GLEW, que es la utilidad de carga de extensión ... espera ... ¿no es GLUT / GLFW una extensión? ¿Hay alguna razón para usarlo, como hay extensiones realmente importantes para interesar?
Hasta ahora tenemos creación de ventanas (y algunas utilidades), pero ... OGL no se encarga de cargar texturas, ni modelos 3D. ¿Cuántas otras bibliotecas necesito?
Vamos a mencionar la parte de educación ahora. Hay (en) el famoso tutorial NeHe. Escrito en C con el uso de WinApi, con un código extremadamente confuso y soluciones desactualizadas, y aún así el más popular. Se pueden encontrar algunas cosas como Red Book, que están relacionadas con versiones como 2.x o 3.x, sin embargo, hay pocos tutoriales (sin terminar) que mencionen 4.x.
¿A qué ir?
Entonces ... actualmente tenemos OpenGL 4.2, que cuando leo en alguna parte requiere hardware dx11 (¿qué significa?) Y un conjunto de librerías "laterales", por ejemplo, crear ventana.
El hardware DX11 es ... hardware que tiene "compatible con DirectX 11" escrito en el costado de la caja. No estoy seguro de qué es lo que estás preguntando aquí; ¿No tiene claro qué es Direct3D, qué es D3D 11 o qué separa a D3D 11 de las versiones anteriores?
FYI: D3D es una alternativa exclusiva de Windows para usar OpenGL para acceder al hardware de renderizado. La versión 11 es simplemente la versión más reciente de la API. Y D3D11 agrega algunas cosas nuevas en comparación con D3D10, pero nada más que un principiante necesitaría.
OpenGL es una especificación que describe una cierta interfaz para operaciones gráficas. Cómo se crea esta interfaz no es parte de OpenGL. Por lo tanto, cada plataforma tiene su propia forma de crear un contexto OpenGL. Windows usa la API de Win32 con WGL. X-Windows usa la API X-Windows con funciones GLX. Etcétera.
Las bibliotecas como GLUT, GLFW, etc. son bibliotecas que resumen todas estas diferencias. Crean y administran una ventana OpenGL para usted, para que no tenga que ensuciar su código con detalles específicos de la plataforma. No tienes que usar ninguno de ellos.
Por supuesto, si está interesado en aprender OpenGL , es mejor evitar el manejo de minutas específicas de la plataforma, como la forma de encargarse de un HWND y cosas así.
Y también tenemos GLEW, que es la utilidad de carga de extensión ... espera ... ¿no es GLUT / GLFW una extensión? ¿Hay alguna razón para usarlo, como hay extensiones realmente importantes para interesar?
Este es otro malentendido. GLUT es una biblioteca , no una extensión. Una extensión OpenGL es parte de OpenGL . Mira, OpenGL es solo una especificación, un documento. La implementación de OpenGL que está utilizando actualmente implementa el sistema de gráficos OpenGL, pero también puede implementar una serie de extensiones para ese sistema de gráficos.
GLUT no es parte de OpenGL; es solo una biblioteca El trabajo de GLUT es crear y administrar una ventana de OpenGL. GLEW es también una biblioteca, que se usa para cargar funciones de OpenGL . No es la única alternativa, pero es popular.
Hasta ahora tenemos creación de ventanas (y algunas utilidades), pero ... OGL no se encarga de cargar texturas, ni modelos 3D. ¿Cuántas otras bibliotecas necesito?
OpenGL no es un motor de juegos. Es un sistema de gráficos, diseñado para interactuar con hardware de gráficos dedicado. Este trabajo no tiene nada que ver con cosas como cargar cualquier cosa desde cualquier tipo de archivo. Sí, hacer un juego requiere esto, pero como se dijo anteriormente, OpenGL no es un motor de juego.
Si necesita cargar un formato de archivo para hacer algo que desea hacer, necesitará escribir el código para realizar la carga (y el ajuste de formato necesario para interactuar con GL) o descargar una biblioteca que lo haga por usted. OpenGL Wiki mantiene una lista bastante buena de herramientas para diferentes tareas .
Hay (en) el famoso tutorial NeHe. Escrito en C con el uso de WinApi, con un código extremadamente confuso y soluciones desactualizadas, y aún así el más popular. Se pueden encontrar algunas cosas como Red Book, que están relacionadas con versiones como 2.x o 3.x, sin embargo, hay pocos tutoriales (sin terminar) que mencionen 4.x.
¿A qué ir?
OpenGL Wiki mantiene una lista de materiales en línea para aprender material de OpenGL , tanto en la vieja escuela como en la más moderna.
ADVERTENCIA: la auto-promoción desvergonzada sigue!
Mis tutoriales sobre aprendizaje de gráficos son bastante buenos, con muchas secciones y todavía se están trabajando activamente. No enseña ninguna funcionalidad específica de OpenGL 4.x, pero OpenGL 3.3 es completamente compatible con 4.2. Todos esos programas funcionarán bien en el hardware 4.x.
También mantengo un SDK no oficial para OpenGL. Es un paquete de utilidades útiles, todas diseñadas para ser construidas por un sistema de compilación simple y unificado. También está razonablemente bien documentado.
"La programación moderna de OpenGL con más C ++ OOP y enfoque de sombreado" me hace mencionar Qt. Todavía no se ha mencionado, pero Qt es una biblioteca que vale la pena aprender y es la forma más sencilla de escribir aplicaciones multiplataforma en C ++. También me pareció la forma más fácil de aprender OpenGL en general, ya que maneja fácilmente la inicialización y el código específico de hardware para usted. Qt tiene sus propias bibliotecas de matemáticas, así que todo lo que necesita para comenzar con OpenGL es Qt. VPlay es una biblioteca que usa Qt para ayudar a las personas a crear juegos fácilmente, por lo que obviamente hay algunas personas que usan Qt para crear juegos.
Para una breve introducción a Qt y OpenGL, mira mi publicación aquí .
Mencionaré que, dado que Qt abstrae algún código de OpenGL, si está tratando de usar los envoltorios de Qt, la API es ligeramente diferente a OpenGL (aunque podría decirse que es más simple).
En cuanto a mi voto por buenos tutoriales o libros, eche un vistazo a los tutoriales de OpenGL de Anton y los tutoriales de Swiftless. El ebook de Anton en Amazon también se clasifica más alto que cualquier otro recurso publicado OpenGL que he visto hasta ahora (y mucho más barato).
Actualmente estoy aprendiendo OpenGL moderno también. También he tenido dificultades para encontrar buenos recursos, pero esto es lo que he descubierto hasta ahora.
Busqué un buen libro y terminé con OpenGL ES 2.0 Programming Guide , que creo que es la mejor opción para aprender OpenGL moderno en este momento. Sí, el libro trata de OpenGL ES, pero no dejes que eso te asuste. Lo bueno de OpenGL ES 2.0 es que todas las partes lentas de la API se han eliminado para que no tenga ningún mal hábito de aprender, mientras que de todos modos está muy cerca de OpenGL de escritorio, con solo algunas características que faltan, que cree que puede aprender con bastante facilidad una vez que haya dominado OpenGL ES 2.0.
Por otro lado, no tiene el desorden con las bibliotecas de ventana, etc. que tiene con OpenGL de escritorio, por lo que el libro de OpenGL ES no lo ayudará allí. Creo que es muy subjetivo qué bibliotecas usar, pero hasta ahora he logrado hacerlo bien con SDL, ImageMagick y Open Asset Import Library .
Ahora, el libro ha sido de gran ayuda, pero aparte de eso, también hay una buena colección de tutoriales que enseñan OpenGL moderno desde cero en el desarrollo de OpenGL en Linux . (Creo que es válido en otros sistemas operativos, sin embargo, el nombre.) El libro, los tutoriales y una o dos visitas al Libro Naranja han sido suficientes para hacerme entender los conceptos básicos del OpenGL moderno. Tenga en cuenta que todavía no soy un maestro en el área, pero definitivamente me ayudó a comenzar.
El punto principal del OpenGL moderno es la teselación y el nuevo tipo de programas de sombreado, por lo que me gustaría recomendar comenzar desde un tutorial independiente sobre la teselación de OpenGL 4, es decir: http://prideout.net/blog/?p=48
Después de los manuales y tutoriales, un buen seguimiento es echar un vistazo a los motores de código abierto que se basan en la parte superior del "nuevo" OpenGL 3/4. Como uno de los desarrolladores, señalaría Linderdaum Engine .
Estoy de acuerdo en que es muy difícil ingresar a OpenGL en estos días cuando todos los tutoriales y ejemplos usan archivos obsoletos de proyectos, enlaces boken, etc., y si pides ayuda, simplemente te dirigen a esos mismos tutoriales antiguos.
Al principio estaba muy confundido con los tutoriales de NeHe, pero cuando comprendí un poco mejor a C, compilé bibliotecas en UNIX y otras cosas básicas, todo encajó.
En cuanto a la carga de texturas, puedo recomendar SOIL: http://www.lonesock.net/soil.html
No estoy seguro, pero recuerdo que tuve problemas para compilarlo correctamente, pero esa puede haber sido mi baja experiencia en ese momento. Dame un grito si te encuentras en problemas!
Otro consejo útil es ejecutar una máquina virtual Linux y luego puede descargar el código de ejemplo de NeHe Linux y compilarlo de la caja. Creo que solo necesitas GLUT para que funcione.
También prefiero GLFW antes que GLUT, principalmente porque GLUT no se mantiene activamente.
¡Buena suerte!
Si está escribiendo un juego, evitaría cosas como GLUT y escribiría sus propios contenedores que tengan más sentido para la arquitectura de renderizado de su juego.
También evitaría OpenGL 4.2 en este punto, a menos que solo desee apuntar a hardware específico en plataformas específicas, porque el soporte es mínimo. es decir, la última versión de Mac OSX Lion acaba de agregar compatibilidad con OpenGL 3.2.
Para obtener la cobertura más completa de las máquinas fabricadas en los últimos años, cree su marco alrededor de OpenGL 2.1 y agregue soporte adicional para las nuevas características de OpenGL donde tengan sentido. El diseño general debería ser el mismo. Si solo le interesa orientar las máquinas "actuales", es decir, las máquinas a partir de finales de 2011 y hacia adelante, cree su marco alrededor de OpenGL 3. Solo el hardware más reciente admite 4.2, y solo en Windows y algo de Linux. Si le interesa orientar sus anuncios a dispositivos móviles y consolas, use OpenGL ES 2.0.
GLEW carga y administra las extensiones OpenGL , que son extensiones de hardware de diferentes proveedores, en contraposición a GLUT, que es un conjunto de herramientas para crear aplicaciones OpenGL, cosas completamente diferentes. Recomiendo encarecidamente usar GLEW, ya que proporcionará un mecanismo limpio para determinar qué funciones están disponibles en el hardware en el que se está ejecutando, y lo liberará de la tarea de tener que asignar manualmente punteros a las funciones apropiadas.
OpenGL SuperBible es un libro bastante bueno, también comprueba OpenGL Shading Language . Todo lo que haga con OpenGL moderno implicará el uso de sombreadores, no más funcionalidades fijas, por lo que su mayor desafío será comprender GLSL y cómo funcionan las tuberías de sombreado.