opengla. garcía-alonso1 introducción a opengl link link

33
OpenGL A. García-Alonso 1 Introducción a OpenGL LINK http://www.sc.ehu.es/ccwgamoa/docencia/ Material/Presentaciones

Upload: dolores-carrasco-tebar

Post on 23-Jan-2016

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 1

Introducción a OpenGL

LINK http://www.sc.ehu.es/ccwgamoa/docencia/Material/Presentaciones

Page 2: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 2

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

Page 3: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 3

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

Page 4: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 4

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– glu librería de mayor nivel construida sobre OpenGL– glaux librerí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

Page 5: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 5

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.

Page 6: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 6

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()

Page 7: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 7

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

Page 8: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 8

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

Data typeTypical CorrespondingC-Language Type

OpenGLType Definition

b 8-bit integer C-Language Type GLbyte s 16-bit integer OpenGL Type GLshort i 32-bit integer int or long Glint GLsizei f 32-bit floating-point float Glfloat GLclampf d 64-bit floating-point double Gldouble GLclampd ub 8-bit unsigned integer unsigned char Glubyte GLboolean us 16-bit unsigned integer unsigned short GLushort

ui 32-bit unsigned integerunsigned int orunsigned long

Gluint Glenum GLbitfield

Page 9: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 9

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 )

Page 10: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 10

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

Page 11: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 11

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 drawingarea de soporte• Asociar función (callback) a un evento (teclado, ratón, etc.)• Evento “drawingarea exposed”• Ajustar algún estado de “gl”

– Bucle proceso eventos

Page 12: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 12

... (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)

Page 13: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 13

... (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)

– void Display ( void )• glutMainLoop(); (dispatching events)

Page 14: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 14

Ejemplo 011 : Teclado

• Exit from an application

• Profundizar en el concepto de CallBack

• gl– glLineWidth

• glut– glutPostRedisplay()

– glutKeyboardFunc( DoIt )• void DoIt (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

Page 15: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 15

Diferenciar estos tres métodos

glutPostRedisplayposts

glutDisplayFuncbinds

Displaydraws

Page 16: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 16

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

Page 17: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 17

...

• 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

Page 18: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 18

Atributos

• glPointSize(GLfloat)• glLineWidth(GLfloat)• glLineStipple(GLint factor, GLushort pattern)

– glEnable( GL_LINE_STIPPLE )• glPolygonMode( face, mode )

– GL_FRONT GL_BACK GL_FRONT_AND_BACK– GL_POINT GL_LINE GL_FILL

• glPolygonStipple (enable) “transparency”• glEdgeFlag* mode Line, splitted concave polygons• glColor*• glMaterial*

Page 19: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 19

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

Page 20: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 20

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

Page 21: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 21

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

Page 22: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 22

Comandos entre : glBegin-glEndCommand 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

Page 23: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 23

Ejemplo 020 : Window to viewport

• Exit from an application

• gl– glMatrixMode

– glLoadIdentity

– viewport

– glOrtho

– glGetIntegerv

• glut– glutReshapeFunc( myNewSize )

• void myNewSize( int w, int h )

Page 24: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 24

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

Page 25: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 25

Materiales

Page 26: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 26

Fuentes de luz

Page 27: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 27

Parámetros de control

Page 28: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 28

Texturas

• Textura superficies

• Reducir detalles geométricos

• Iluminación precalculada (texturas, texturas animadas)

Page 29: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 29

Bucle de visualización

Page 30: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 30

Estructuras geométricas

Page 31: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 31

Estructuras materiales

Page 32: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 32

Estructuras luces

• Limitadas (8)

• Coste de las luces

• Luz en la cabeza

• VRML : radio de acción de las luces posicionales y focos

Page 33: OpenGLA. García-Alonso1 Introducción a OpenGL LINK LINK

OpenGL A. García-Alonso 33

Materiales (parámetros)

• Definir las constantes usadas para distintos materiales: hierro, acero, plata, oro