1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface...

23
1 OpenGL

Transcript of 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface...

Page 1: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

1

OpenGL

Page 2: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

Introducción

• OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de

• comandos para manipulación de objetos y operaciones sobre estos los cuales permiten controlar la

• implementación realizada en la forma de una maquina de estados finitos, donde cada una de las variables que

• determinan el estado se aplican a partir de ese punto hasta que se indique explícitamente el cambio, así las

2

Page 3: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

• variables de estado de OpenGL que vamos a utilizar mas comúnmente son:

• Color (de dibujo y de borrado).

• Matrices de Transformación (GL_MODELVIEW, GL_PROYECTION).

• Patrones (de líneas y de relleno).

• Modo de dibujo de poligonos.

• Buffers de dibujo.

• Buffer de Stencil.

• Buffer de profundidad (z-Buffer).

• Buffer de acumulacion.

3

Page 4: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

4

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 5: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

5

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 6: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

6

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 7: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

7

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 8: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

8

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 9: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

9

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 10: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

10

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 11: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

11

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 12: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

12

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 13: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

13

... (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 14: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

14

... (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 15: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

15

Diferenciar estos tres métodos

glutPostRedisplayposts

glutDisplayFuncbinds

Displaydraws

Page 16: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

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: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

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: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

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: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

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: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

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: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

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: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

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: 1 OpenGL. Introducción OpenGL es una interface de software para el hardware grafico, esta interface consiste de una larga serie de comandos para manipulación.

23

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