![Page 1: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/1.jpg)
1
OPENGL
Desarrollo de Aplicaciones Interactivas
¿Qué es OpenGL?
API gráfica– Imágenes color de alta calidad compuesta de
primitivas geométricas e imágenes– Independiente de
Sistema de ventanasSistema operativo
![Page 2: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/2.jpg)
2
¿Qué es OpenGL?
Primitivas geométricas– Puntos, líneas y polígonos
Primitivas de imagen– Imágenes y bitmaps– Tubería para imágenes y geometría
Enlace a través de mapeo de texturas
Estado – Colores, materiales, fuentes de luz, etc
Arquitectura
![Page 3: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/3.jpg)
3
OpenGL y terminología Windows
GDI y Device Contexts (DC)– GDI interfaz gráfico original Windows 2D. Dibuja en pantalla, memoria,
impresora, etc usando contextos de dispositivos, que son los que saben cómo trabajar con el dispositivo.
Rendering Contexts (RC)– Ligados a un DC. En un programa OpenGL juegan el mismo papel que un
DC para un programa GDI.
Pixel Formats– Configuración de color y buffers asociados a un DC o RC. Son la capa de
traducción entre las llamadas OpenGL y las operaciones a realizar.– Funciones Windows OpenGL para manejo de formato de pixeels:
ChoosePixelFormat(), SetPixelFormat(), GetPixelFormat(), yDescribePixelFormat().
APIs relacionadas
AGL, GLX, WGL– Glue entre OpenGL y sistemas de ventanas: X-Windows,
Apple y Windows respectivamente
GLU (OpenGL Utility Library)– Parte de OpenGL– Superficies, curvas, concavidades, etc
GLUT (OpenGL Utility Toolkit)– API portable, no es parte oficial de OpenGL
![Page 4: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/4.jpg)
4
Estructura básica GLUT
Seleccionar el tipo de ventana para la aplicación
Inicializar el estado OpenGL: color, fondo, luces, texturas
Registrar las rutinas que se van a utilizar para renderizado, cambios de tamaño, eventos, etc
Bucle de procesamiento de eventos
Preliminares
Ficheros cabecera– #include <GL/gl.h> (core)– #include <GL/glu.h> (utility)– #include <GL/glut.h> (toolkit) (en windows basta con incluir
esta, al incluir las dos anteriores)
Librerías– Unix libGL.so; windows opengl32.lib
Tipos enumerados– para la portabilidad. GLfloat, Glint, Glenum, etc
![Page 5: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/5.jpg)
5
Inicialización
void init( void ){
glClearColor( 0.0, 0.0, 0.0, 1.0 );glClearDepth( 1.0 );glEnable( GL_LIGHT0 );glEnable( GL_LIGHTING );glEnable( GL_DEPTH_TEST );
}
Ejemplo de programa
void main( int argc, char** argv ){
int mode = GLUT_RGB|GLUT_DOUBLE;glutInitDisplayMode( mode );glutCreateWindow( argv[0] );init();glutDisplayFunc( display );glutReshapeFunc( resize );glutKeyboardFunc( key );glutIdleFunc( idle );glutMainLoop();
}
![Page 6: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/6.jpg)
6
Funciones callback
Para cuando algo sucede– Cambiar tamaño, redibujar– Entrada de usuario– Animación
glutDisplayFunc( display );glutIdleFunc( idle );glutKeyboardFunc( keyboard );
glutDisplayFunc( display )
Refresco de pantalla
void display( void ){
glClear( GL_COLOR_BUFFER_BIT );glBegin( GL_TRIANGLE_STRIP );glVertex3fv( v[0] );glVertex3fv( v[1] );glVertex3fv( v[2] );glVertex3fv( v[3] );glEnd();glutSwapBuffers();
}
![Page 7: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/7.jpg)
7
glutIdleFunc( idle )
Animación y actualización continua
void idle( void ){
t += dt;glutPostRedisplay();
}
glutKeyboardFunc( keyboard );
Procesar entrada de usuario
void keyboard( char key, int x, int y ){
switch( key ) {case ‘q’ : case ‘Q’ :exit( EXIT_SUCCESS );break;case ‘r’ : case ‘R’ :rotate = GL_TRUE;break;
}}
![Page 8: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/8.jpg)
8
Renderizando elementos
Primitivas geométricas
Gestión del estado OpenGL
Buffers OpenGL
Primitivas geométricas OpenGL
![Page 9: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/9.jpg)
9
Ejemplo: Dibujar rombo
void drawRhombus( GLfloat color[] ){
glBegin( GL_QUADS );glColor3fv( color );glVertex2f( 0.0, 0.0 );glVertex2f( 1.0, 0.0 );glVertex2f( 1.5, 1.118 );glVertex2f( 0.5, 1.118 );glEnd();
}
Formatos de comando
![Page 10: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/10.jpg)
10
Especificación de primitivas
UsandoglBegin( primType );glEnd();
primType determina cómo se combinan los vértices
GLfloat red, greed, blue;Glfloat coords[3];glBegin( primType );for ( i = 0; i < nVerts; ++i ) {
glColor3f( red, green, blue );glVertex3fv( coords );
}glEnd();
FORMAS
Máquina de estados OpenGL
Atributos de renderización encapsulados en el estado OpenGL– Estilos de renderización– Iluminación– Mapeo de texturas– Sombreado
![Page 11: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/11.jpg)
11
Cambiando el estado….
Apariencia controlada por el estado actualpara cada (primitiva a renderizar)
{actualizar estado OpenGLrenderizar
}
Forma más común: Manipular atributos de vértices:– glColor()– glNormal()– glTexCoord()
Ejemplo
Establecer estadoglPointSize( size );glLineStipple( repeat, pattern );glShadeModel( GL_SMOOTH );
HabilitarglEnable( GL_LIGHTING );glDisable( GL_TEXTURE_2D );
![Page 12: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/12.jpg)
12
Transformaciones
Tipos de transformaciones (afines)
Proyección– Ajustar la lente de la cámara
Vista– Posición del trípode y orientación del volumen de visión
Modelo– Mover el modelo
Viewport– Agrandar o reducir la fotografía física
![Page 13: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/13.jpg)
13
Sistemas de coordenadas y transformaciones
Pasos para formar una imagen– Especificar geometría (coordenadas “reales”)– Especificar cámara (coordenada de cámara)– Proyectar (coordenadas de ventana)– Mapeo (coordenadas de pantalla)
Cada paso usa transformaciones
Cada transformación es equivalente a cambios en sistemas de coordenadas (frames)
Transformación 3D
Un vértices es un vector 1x4Se usa una matriz de transformación 4 x 4 Se multiplican las matrices
![Page 14: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/14.jpg)
14
Implementando transformaciones
Dos formas de hacerlo– Especificar matrices (glLoadMatrix, glMultMatrix)– Especificar operación (glRotate, glOrtho)
Se definen las matrices antes de renderizar, ver, situar, orientar (son parte del estado)
– Posición ojo/cámara, geometría 3D
Gestión de matrices– Pila de matrices
Combinar transformaciones
Transformaciones
![Page 15: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/15.jpg)
15
Proyecciones
PerspectivaProyección ortográfica
Viendo transformaciones
Situar la cámara/ojo en la escena– Situar el trípode
Volar por la escena– Cambiar la transformación de vista y redibujar
gluLookAt( eyex, eyey, eyez,aimx, aimy, aimz,upx, upy, upz)
![Page 16: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/16.jpg)
16
Modelando transformaciones
MoverglTranslate{fd}( x, y, z )
RotarglRotate{fd}( angle, x, y, z )
EscalarglScale{fd}( x, y, z )
Double Buffering
![Page 17: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/17.jpg)
17
Animación usando doble buffer
Inicializar el doble bufferglutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
Limpiar buffer de colorglClear( GL_COLOR_BUFFER_BIT );
Renderizar escena
Intercambiar frente y fondoglutSwapBuffers();
Repetir 2-4 para animación
Depth buffering
if ( pixel->z < depthBuffer(x,y)->z ) {depthBuffer(x,y)->z = pixel->z;colorBuffer(x,y)->color = pixel->color;}
![Page 18: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/18.jpg)
18
Depth buffering en OpenGL
Iniciar el depth bufferglutInitDisplayMode( GLUT_RGB |GLUT_DOUBLE | GLUT_DEPTH );
ActivarloglEnable( GL_DEPTH_TEST );
LimpiarloglClear( GL_COLOR_BUFFER_BIT
|GL_DEPTH_BUFFER_BIT );RenderizarIntercambiar colores de los buffers
Iluminación: Principios
Simular cómo los objetos reflejan la luz– Composición material del objeto– Color de luz y posición– Parámetros globales de iluminación
Luz ambientalLuz de dos caras
– Paleta indexada y RBGA
![Page 19: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/19.jpg)
19
Iluminación en OpenGL
Modelo de iluminación Phong– Se calcula en los vértices
Contribuidores a la iluminación– Propiedades de superficie– Propiedades de luz– Propiedades del modelo de iluminación
Propiedades de materiales
glMaterialfv (face, property, value)Materiales separados para frente y fondo
![Page 20: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/20.jpg)
20
Propiedades de luz
glLightfv( light, property, value );– Light– Múltiples luces, primera with GL_LIGHT0
glGetIntegerv( GL_MAX_LIGHTS, &n );
Propiedades– colores– posición y tipo– atenuación
Propiedades de luz
Color de luz– GL_AMBIENT– GL_DIFFUSE– GL_SPECULAR
Tipos de luz (situada en posición w)– Puntual (Point) (x/w y/w z/w)– Infinita (Directional) (x y z)
Encender las luces– Cada foco: glEnable(GL_LIGHTn);– Global: glEnable(GL_LIGHTING);
Iluminación y materiales
![Page 21: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/21.jpg)
21
Otros aspectos de iluminación
Posición de la luz– Sistemas de coordenadas (ojo, mundo, modelo)
Atenuación de la luz– GL_CONSTANT_ATTENUATION– GL_LINEAR_ATTENUATION– GL_QUADRATIC_ATTENUATION
Puntos de luz– GL_SPOT_DIRECTION– GL_SPOT_CUTOFF– GL_SPOT_EXPONENT
Propiedades del modelo de iluminación
glLightModelfv( property, value );Luz de doble caraGL_LIGHT_MODEL_TWO_SIDE
Color ambiente globalGL_LIGHT_MODEL_AMBIENT
Modelo localGL_LIGHT_MODEL_LOCAL_VIEWER
Color especularGL_LIGHT_MODEL_COLOR_CONTROL
![Page 22: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/22.jpg)
22
Primitivas de imagen y bitmaps
Primitivas basadas en píxels
Bitmaps– Array 2D de máscaras de bits para píxeles;
Imágenes– Array 2D de información de colores de píxeles
OpenGL no entiende formatos de imagen
![Page 23: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/23.jpg)
23
Algunas primitivas
Posicionamiento (respecto del viewport)
– glRasterPos3f( x, y, z )
Generación– glBitmap( width, height,
xorig, yorig, xmove,ymove, bitmap )
Fuentes como bitmaps
Cada carácter se almacena como un bitmap
Existen rutinas específicas del sistema de ventanas para acceder a las fuentes del sistema– glXUseXFont()– wglUseFontBitmaps()
![Page 24: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/24.jpg)
24
Generando imágenes
glDrawPixels( width, height, format, type,pixels)
Pone el píxel inferior izquierdo en la posición actual
Muchas formas de almacenamiento en memoria (formatos y tipos de datos)
– Formatos: rgb, intensity, depth, stencil– Tipo: GL_FLOAT, GL_INT,GL_UNSIGNED_SHORT
Manejando píxeles
glReadPixels( x, y, width, height, format, type, pixels )
– A partir de la posición X,Y– Conversión automática al formato y tipo
Copia de píxeles– glCopyPixels( x, y, width, height, type )
Zoom de píxeles– glPixelZoom(x,y)
![Page 25: opengl - UMdis.um.es/~jfernand/0506/dai/opengl.pdf · 3 OpenGL y terminología Windows zGDI y Device Contexts (DC) – GDI interfaz gráfico original Windows 2D. Dibuja en pantalla,](https://reader031.vdocuments.co/reader031/viewer/2022040100/5eaf68e2a47e073cb666b988/html5/thumbnails/25.jpg)
25
Otros aspectos de OpenGL
Texturas– Simulación de materiales– Reducir complejidad geométrica– Reflexiones– Operaciones sobre imágenes
Listas de visualización y arrays de vérticesCanal alfaAntialiasing…….
Cómo instalar las bibliotecas de funciones OpenGl , glaux y Glut.
Se pueden obtener en http://www.opengl.org.
Los ficheros necesarios son: – Ficheros de cabecera: gl.h, glut.h, glu.h y glaux.h– Bibliotecas estáticas: opengl32.lib, glu32.lib, glut.lib y glaux.lib– Bibliotecas dinámicas: opengl32.dll, glu32.dll, glut32.dll
Copiar los ficheros de cabecera en el directorio include/gl de Borland Builder C++. Copiar las bibliotecas estáticas en Lib, y las bibliotecas dinámicas en C:/windows/system.