370 likes | 833 Views
Introducción a OpenGL. LINK http:// www .sc.ehu.es/ccwgamoa/docencia/Material/Presentaciones. Antecedentes. CORE Graphics standard (SIGGRAPH 1977) IGL-Plot 10 (Tektronix) Interactive Graphic Library HP-GL “plotting language” (Hewlett Packard) Hewlett Packard Graphic Language
E N D
Introducción a OpenGL LINK http://www.sc.ehu.es/ccwgamoa/docencia/Material/Presentaciones A. García-Alonso
Antecedentes • CORE Graphics standard (SIGGRAPH 1977) • IGL-Plot 10 (Tektronix) • Interactive Graphic Library • HP-GL “plotting language” (Hewlett Packard) • Hewlett Packard Graphic Language • Starbase (Hewlett Packard) • PHIGS (standard ANSI, ISO) • Programmer's Hierarchical Interactive Graphics System • GKS, GKS-3D (standard ANSI, ISO) • Graphic Kernel System • GL (Silicon Graphics) OpenGL • Graphic Library A. García-Alonso
Clasificar-distinguir “sistemas gráficos” • Sintaxis y semántica de ficheros • Estándar (ISO, ANSI, ...) : VRML, X3D • Estándar industrial “de facto standard” : DXF, 3ds, obj, … • Librerías, APIs, Toolkits, ... • OpenGL, Direct 3D (low level) • Java 3D (scene graph, nodes) • Open Inventor (scene graph, nodes) • Performer (large-scale visualization model) • [ Fahrenheit ] (three levels) • Motores A. García-Alonso
Librerías en OpenGL • Librería de funciones para generar imágenes a partir de modelos 3D, más otras librerías auxiliares • gl la librería OpenGL relacionada directamente con el H/W • glulibrería de mayor nivel construida sobre OpenGL • glauxlibrería fuera de uso • glut librería para crear interfaces de usuario transportables (Linux, Windows) • En Visual C++ falta (están en el web de la asignatura) • glut.dll windows\system(32) • glut.lib …\lib • glut.h …\include\gl A. García-Alonso
Entorno de programación • Visual C++ (versión 6.0) • Trabajamos en C, es decir sin crear clases de C++ • Añadir las librerías opengl32.lib glu32.lib glut32.lib • Project : settings : link : Object/Library Modules • Ficheros a incluir • #include <GL/gl.h> • #include <GL/glu.h> • If you are using GLUT for managing your window manager • #include <GL/glut.h> • Note that glut.h includes gl.h, glu.h, and glx.h automatically, so including all three files is redundant. A. García-Alonso
Estados • Máquina de estados • Color de fondo • Intensidad de luz • Material de dibujo • Luz encendida o apagada • etc • Valor o estado • glColor*(), glGetFloatv() • glEnable(), glDisable(), glIsEnabled() A. García-Alonso
Command syntax (functions) • glVertex3fv( ... ) • gl tells that this function belongs to the “gl” s/w package • 3 is used to indicate three arguments • f is used to indicate that the arguments are floating point • v indicates that the arguments are in vector format • Number Of Arguments: 2, 3, or 4 • Bi-dimensional version of the command • 3D or rgb • Homogeneous coordinates or rgb+alpha • Formats • absence of v indicates scalar format • v indicates vector format A. García-Alonso
Tipos variables y constantes • Las equivalencias más habituales aparecen en la tabla • Se recomienda definir los argumentos que se pasan a las funciones de OpenGL usando sus tipos predefinidos • Para Glint unos sistemas pueden usar short, otros long • Para Glfloat unos sistemas float otros double A. García-Alonso
Constants & “defined names” • Ejemplos : • #define GL_COLOR_BUFFER_BIT 0x00004000 • #define GL_POINTS 0x0000 • #define GL_LINE_LOOP 0x0002 • #define GL_POLYGON 0x0009 • Defined names (for constants) • Begin with GL_ • Use all capital letters • Use underscores to separate words • Operaciones “bitwise inclusive or operator” • glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE ) A. García-Alonso
Sistema gobernado por eventos • Event(evento) : teclado, ratón, pasar por, etc. • Callback : nombre, tipo, interfaz • Bind : a callback to an event (asociar función y evento) • Main( ) • Inicialización • Loop(bucle) dispatch events(proceso eventos) • Post an event A. García-Alonso
Ejemplo 010 : Dibuja 3 segmentos • Cfr. OpenGLPrimer 010 • Dibuja tres líneas • OpenGL functions and (concepts) • gl • glut • Sistema gobernado por eventos : estructura “main” • Inicialización • Creación ventana contenga el drawingareade soporte • Asociar función (callback) a un evento (teclado, ratón, etc.) • Evento “drawingarea exposed” • Ajustar algún estado de “gl” • Bucle proceso eventos A. García-Alonso
... (gl) • pure "output", but lacks connection with display • glClear(command) • glClearColor(state) • glBegin glEnd • glVertex* (geometry) • glColor* (attribute, state) • glFlush, glFinish (command stack & processing) • (debbuging) • (aspect ratio) • (mapping from modelling coord. to display coordinates) • (need for a transformation management system) A. García-Alonso
... (glut) • Window system independent management • “window” management • glutInitDisplayModel( GLUT_RGB | GLUT_SINGLE ); • glutInitWindowSize( WIDTH, HEIGHT ); • glutInitWindowPosition ( 550, 350 ); • glutCreateWindow(“Basic Draw"); • “input” : event handling • similar to : The X Window system, MOTIF, MFF, ... • (event) • void Display(void); (callback function) • glutDisplayFunc( Display ); (binding event & callback) • voidDisplay ( void ) • glutMainLoop(); (dispatching events) A. García-Alonso
Ejemplo 011 : Teclado • Exit from an application • Profundizar en el concepto de CallBack • gl • glLineWidth • glut • glutPostRedisplay() • glutKeyboardFunc( DoIt ) • voidDoIt (unsigned char key, int x, int y) • DoIt puede tomar cualquier nombre • Sin embargo, al declarar y definir la función, su tipo y el de sus parámetros debe ser forzosamente el que se indica A. García-Alonso
glutPostRedisplay posts glutDisplayFuncbinds Display draws Diferenciar estos tres métodos A. García-Alonso
Primitivas GL_POINTS GL_LINES GL_LINE_LOOP GL_LINE_STRIP GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUADS GL_QUAD_STRIP GL_POLYGON A. García-Alonso
... • Otras primitivas disponibles (glu library) • Polígonos : cóncavos, múltiplemente conexos • Objetos (uso auxiliar, no para crear modelos) • Evaluators, NURBS, etc • Vertex arrays (veremos después de los atributos) • Display lists (veremos después de los atributos) • Texto • No existe primitiva • Usar texturas, problema aliasing A. García-Alonso
Atributos • glPointSize(GLfloat) • glLineWidth(GLfloat) • glLineStipple(GLint factor, GLushort pattern) • glEnable( GL_LINE_STIPPLE ) • glPolygonMode( face, mode ) • GL_FRONT GL_BACKGL_FRONT_AND_BACK • GL_POINT GL_LINE GL_FILL • glPolygonStipple (enable) “transparency” • glEdgeFlag* mode Line, splitted concave polygons • glColor* • glMaterial* A. García-Alonso
Variables de estado • Valor de defecto • Valor actual • Gestión en una aplicación o en un módulo reutilizable • Valor de defecto en una aplicación dada • Política de cambios de estado en un módulo de software • glPushAttrib( ored mask ) / glPopAttrib() • Permiten salvar grupos de atributos A. García-Alonso
GL_ACCUM_BUFFER_BIT accum-buffer GL_ALL_ATTRIB_BITS -- GL_COLOR_BUFFER_BIT color-buffer GL_CURRENT_BIT current GL_DEPTH_BUFFER_BIT depth-buffer GL_ENABLE_BIT enable GL_EVAL_BIT eval GL_FOG_BIT fog GL_HINT_BIT hint GL_LIGHTING_BIT lighting GL_LINE_BIT line GL_LIST_BIT list GL_PIXEL_MODE_BIT pixel GL_POINT_BIT point GL_POLYGON_BIT polygon GL_POLYGON_STIPPLE_BIT polygon-stipple GL_SCISSOR_BIT scissor GL_STENCIL_BUFFER_BIT stencil-buffer GL_TEXTURE_BIT texture GL_TRANSFORM_BIT transform GL_VIEWPORT_BIT viewport Grupos de atributos A. García-Alonso
Agrupamiento • Vertex arrays • Evitar pérdidas de tiempo en llamadas a funciones • Display Lists • Ídem • La información puede estar ya más procesada • Almacenar en el procesador gráfico para aliviar el bus • Workstations • PCs A. García-Alonso
Command Purpose of Command Reference glVertex*() set vertex coordinates Chapter 2 glColor*() set current color Chapter 5 glIndex*() set current color index Chapter 5 glNormal*() set normal vector coordinates Chapter 2 glEvalCoord*() generate coordinates Chapter 11 glCallList(), glCallLists() execute display list(s) Chapter 4 glTexCoord*() set texture coordinates Chapter 9 glEdgeFlag*() control drawing of edges Chapter 2 glMaterial*() set material properties Chapter 6 Comandos entre : glBegin-glEnd A. García-Alonso
Ejemplo 020 : Window to viewport • Exit from an application • gl • glMatrixMode • glLoadIdentity • viewport • glOrtho • glGetIntegerv • glut • glutReshapeFunc( myNewSize ) • void myNewSize( int w, int h ) A. García-Alonso
Implementación en OpenGL • Materiales • Fuentes de luz • Parámetros de control • Texturas • Bucle de visualización interactiva • Aspectos prácticos estructuras de datos • Modelos geométricos • Materiales • Luces A. García-Alonso
Materiales A. García-Alonso
Fuentes de luz A. García-Alonso
Parámetros de control A. García-Alonso
Texturas • Textura superficies • Reducir detalles geométricos • Iluminación precalculada (texturas, texturas animadas) A. García-Alonso
Bucle de visualización A. García-Alonso
Estructuras geométricas A. García-Alonso
Estructuras materiales A. García-Alonso
Estructuras luces • Limitadas (8) • Coste de las luces • Luz en la cabeza • VRML : radio de acción de las luces posicionales y focos A. García-Alonso
Materiales (parámetros) • Definir las constantes usadas para distintos materiales: hierro, acero, plata, oro A. García-Alonso