Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
|
fw:ogl:xtra2 [2009/11/07 20:07] alfred creado |
fw:ogl:xtra2 [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== OpenGL (Xtra 2) ====== | ====== OpenGL (Xtra 2) ====== | ||
| + | |||
| + | |||
| + | |||
| + | ===== GLUT ===== | ||
| + | GLUT (openGL Utility Toolkit) es una librería para escribir programas con interface gráfica OpenGL de forma fácil, por lo que da la posibilidad de aprender a programar con OpenGL de una forma muy sencilla | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Instalación y uso ==== | ||
| + | === En Linux === | ||
| + | Podremos instalar el paquete ''freeglut'', luego para compilar utilizaremos la siguiente línea: | ||
| + | <code> | ||
| + | $ g++ -Wall -o "%e" "%f" -I/usr/include/ImageMagick/ -lglut -lGL -lGLU -lMagick++ | ||
| + | </code> | ||
| + | === En Windows === | ||
| + | * {{fw:ogl:glut-3.7.6-bin.zip|GLUT 3.7.6}} | ||
| + | Descomprimiremos este archivo en la carpeta del proyecto y agregaremos las siguientes librerías ''opengl32.lib'' y ''glut32.lib''. Luego haremos un include de ''glut.h''. | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Funciones ==== | ||
| + | === Inicio === | ||
| + | * ''glutInit()'': Inicializa GLUT para ser utilizado. Debería recibir por parámetro los parámetros que recibe la función main. | ||
| + | * ''glutInitDisplayMode()'': Inicializa el display mode, indica cómo se mostrarán los ventanas creadas a partir de GLUT. Acepta un ''unsigned int'' como parámetro correspondiente a las distintas flags combinadas por OR (|): | ||
| + | * ''GLUT_RGBA'' | ||
| + | * ''GLUT_RGB'' | ||
| + | * ''GLUT_INDEX'' | ||
| + | * ''GLUT_SINGLE'' | ||
| + | * ''GLUT_DOUBLE'', double buffering. | ||
| + | * ''GLUT_ACCUM'' | ||
| + | * ''GLUT_ALPHA'' | ||
| + | * ''GLUT_DEPTH'' | ||
| + | * ''GLUT_STENCIL'' | ||
| + | * ''GLUT_MULTISAMPLE'' | ||
| + | * ''GLUT_STEREO'' | ||
| + | * ''GLUT_LUMINANCE'' | ||
| + | |||
| + | === Ventana === | ||
| + | * ''glutInitWindowSize'', recibe dos ''int'' que indican el tamaño de la ventana (ancho y alto). | ||
| + | * ''glutInitWindowPosition'', recibe dos ''int'' que indican la posición inicial de la ventana. | ||
| + | * ''glutCreateWindow'', crea la ventana, recibe una cadena de carácteres correspondientes al título. | ||
| + | |||
| + | === Dibujo === | ||
| + | * ''glutDisplayFunc'', indica cual es la función encargada de dibujar. Recibe ''(void(*func)(void))'', es decir, el nombre de la función que devuelve ''void'' y no recibe parámetros. | ||
| + | * ''glutPostRedisplay'', ordena el redibujo. | ||
| + | |||
| + | === Teclado === | ||
| + | * ''glutKeyboardFunc'', indica la función que se llamará cuando se realice una pulsación de teclado. Recibe por parámetro el nombre de la función, teniendo que ser esta con el siguiente formato: ''(void(*func)(unsigned char key, int x, int y))''. | ||
| + | * ''glutKeyboardUpFunc'', con el mismo formato que la anterior, indica cuando se levanta una tecla. | ||
| + | |||
| + | === Otras === | ||
| + | * ''glutMainLoop'' función que inicia el //main loop// de glut, por lo tanto muestra la ventana, la mantiene abierta y se va llamando al bucle principal del programa. | ||
| + | * ''glutIdleFunc'' indica la función que se ejecutará cuando se haga una iteración del main loop. | ||
| + | * ''glutTimerFunc'' indica cada cuanto se ejecutará la función del main loop. | ||
| + | |||
| + | ==== Ejemplos ==== | ||
| + | === Simple === | ||
| + | <code c> | ||
| + | #include "glut.h" | ||
| + | |||
| + | void renderScene(void) { | ||
| + | glClear(GL_COLOR_BUFFER_BIT); | ||
| + | glBegin(GL_TRIANGLES); | ||
| + | glVertex3f(-0.5,-0.5,0.0); | ||
| + | glVertex3f(0.5,0.0,0.0); | ||
| + | glVertex3f(0.0,0.5,0.0); | ||
| + | glEnd(); | ||
| + | glFlush(); | ||
| + | } | ||
| + | |||
| + | void main(int argc, char **argv) { | ||
| + | glutInit(&argc, argv); | ||
| + | glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); | ||
| + | glutInitWindowPosition(100,100); | ||
| + | glutInitWindowSize(320,320); | ||
| + | glutCreateWindow("3D Tech- GLUT Tutorial"); | ||
| + | glutDisplayFunc(renderScene); | ||
| + | glutMainLoop(); | ||
| + | } | ||
| + | </code> | ||
| + | |||
| ===== OpenGL en Linux ===== | ===== OpenGL en Linux ===== | ||
| Antes de empezar a desarrollar para Linux en OpenGL es necesario saber si nuestro sistema puede renderizar código OpenGL, para ello utilizaremos el comando ''glxinfo'' de la siguiente forma: | Antes de empezar a desarrollar para Linux en OpenGL es necesario saber si nuestro sistema puede renderizar código OpenGL, para ello utilizaremos el comando ''glxinfo'' de la siguiente forma: | ||
| Línea 31: | Línea 121: | ||
| GLX es la librería que proporciona un enlace entre las X y OpenGL activando la posibilidad de dibujo 3d sobre las ventanas. Para desarrollar con esta debemos añadir la librería **GL** (compilando con ''-lGL''). \\ | GLX es la librería que proporciona un enlace entre las X y OpenGL activando la posibilidad de dibujo 3d sobre las ventanas. Para desarrollar con esta debemos añadir la librería **GL** (compilando con ''-lGL''). \\ | ||
| La versión actual de GLX es la 1.3 que corresponde a la OpenGL 1.2. \\ | La versión actual de GLX es la 1.3 que corresponde a la OpenGL 1.2. \\ | ||
| + | |||
| ===== OpenGL ES ===== | ===== OpenGL ES ===== | ||
| + | ===== WebGL ===== | ||
| + | |||