mac - Diferencia entre los archivos OpenGL glew.h y gl.h/glu.h
glew opengl mac (2)
He creado un programa opengl con mis archivos de encabezado glu y gl incluidos de forma predeterminada en Windows 7 Professional Edition. Ahora, he comprado un libro que describe el desarrollo de juegos OpenGL. El autor de este libro dijo: Tengo que incluir el encabezado Glew en mi proyecto. Después de hacer esto obtuve algunos errores de símbolos externos no resueltos.
Así que, ahora estoy realmente confundido. He trabajado anteriormente con las declaraciones glBegin y glEnd en mi programa. Ahora tengo que trabajar con glBindBuffers y glGenBuffer, etcétera, pero obtengo los errores de símbolos externos no resueltos, como eso:
1>cWindows.obj : error LNK2001: unresolved external symbol __imp___glewBindBuffer
1>cMdlLoader.obj : error LNK2001: unresolved external symbol __imp___glewBindBuffer
1>cMdlLoader.obj : error LNK2001: unresolved external symbol __imp___glewBufferData
1>cMdlLoader.obj : error LNK2001: unresolved external symbol __imp___glewGenBuffers
¿Hay alguien aquí que pueda explicar la diferencia entre estos archivos de encabezado y lo que tengo que hacer con ellos?
Me quedé atónito durante mucho tiempo, pero en sitios diferentes hay palabras mucho más confusas como "glee" o "glut".
Estás mezclando 3 cosas diferentes aquí:
- OpenGL
- las Utilidades GL (GLU) que no son parte de OpenGL
- y la extensión de GL Wrangler (GLEW)
GLEW y GLU son cosas completamente diferentes y no puedes reemplazar una con otra.
GL/gl.h
son los encabezados básicos de OpenGL, que le dan la función OpenGL-1.1 y las declaraciones de token, tal vez más. Para cualquier cosa que vaya más allá de la versión 1.1, debe usar el mecanismo de extensión OpenGL. Dado que se trata de una tarea aburrida y tediosa, que ha sido automatizada por el proyecto GLEW, que ofrece todos los detalles sucios en una biblioteca fácil de usar. Las declaraciones de esta biblioteca se encuentran en el archivo de encabezado GL/glew.h
Como las extensiones OpenGL no tienen sentido sin OpenGL básico, el encabezado GLEW incluye implícitamente el encabezado normal de OpenGL, por lo que a partir de incluir GL/glew.h
ya no es necesario que incluya GL/gl.h
Luego está GLU, un conjunto de métodos de conveniencia, los cuales, por cierto, están muy desactualizados y no deberían usarse en ningún programa moderno de OpenGL. No hay una GLU moderna, así que olvídalo. De todos modos, sus declaraciones están disponibles mediante el encabezado GL/glu.h
(sobre el que preguntaba).
Sin embargo, los errores que obtienes no tienen nada que ver con los archivos incluidos . Esos son errores del enlazador. Solo incluir las declaraciones es solo la mitad del trabajo. La otra mitad está vinculando las definiciones reales y esas no están en el encabezado del archivo de la biblioteca; libglew.so
o libglew.a
en un * nix OS, glew.lib
o glew32.lib
o glews.lib
o glew32s.lib
en Windows. Si no usa las versiones estáticas (las que no tienen la ''s''), también debe haber instalado la DLL correcta.
Por lo tanto, para usar GLEW, debe incluir el encabezado y agregarlo a la lista de bibliotecas en las opciones del vinculador. También debes llamar a glewInit();
una vez que haya obtenido un contexto OpenGL en su programa.
- gl : Este es el archivo de encabezado base para OpenGL versión 1.1. Eso significa que si desea usar cualquier funcionalidad más allá de la versión 1.1, debe agregar cualquier biblioteca de extensión en esto.
- glew : OpenGL Extension Wrangler Library. Esta es una biblioteca multiplataforma para cargar la funcionalidad extendida de OpenGL. Cuando inicie esta biblioteca, comprobará su plataforma y tarjeta gráfica en tiempo de ejecución para saber qué funcionalidad se puede usar en su programa.
- glu : Esta es la biblioteca de utilidades OpenGL, que no se ha actualizado durante mucho tiempo. No es necesario utilizar este archivo de encabezado.
- glut : OpenGL Utility Toolkit para API de Windowing. Esto es bueno para el programa OpenGL de tamaño pequeño a mediano. Si necesita bibliotecas de ventanas más sofisticadas, use los kits de herramientas del sistema de ventanas nativas como GTK o Qt para máquinas Linux.
- glfw : OpenGL Frame Work. Otra biblioteca multiplataforma para crear ventanas y manejar eventos. FreeGlut puede ser usado como una alternativa. glfw está diseñado para el desarrollo de juegos.
- glm : Matemáticas OpenGL. Ayuda a implementar operaciones de vectores y matrices.
Soy muy nuevo en OpenGL, así que corríjame si me equivoco.