Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
fw:ogl:xtra2 [2009/11/10 20:06] alfred |
fw:ogl:xtra2 [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== OpenGL (Xtra 2) ====== | ====== OpenGL (Xtra 2) ====== | ||
| + | |||
| ===== GLUT ===== | ===== 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 | ||
| + | |||
| + | |||
| + | |||
| + | |||
| - | GLUT (openGL Utility Toolkit) es una librería para escribir programas OpenGL de forma fácil, permitiendo implementar una aplicación con interface gráfica de forma sencilla, por lo que lo que da la posibilidad de aprender a programar con OpenGL de una forma muy sencilla | ||
| ==== Instalación y uso ==== | ==== Instalación y uso ==== | ||
| === En Linux === | === 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 === | === 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 ===== | ||