1 Máster en Creación y Producción de VideojuegosOpenGL Gonzalo Mariscal Vivas
2 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridOpenGL - Índice 1. Introducción 2. Operaciones OpenGL 3. Rasterización / Renderizado 4. Per-Fragment Operations and the Framebuffer 5. Special Functions 6. State and State Requests OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
3 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridIntroducción Definiciones OpenGL (del inglés “Open Graphics Library”) es una interfaz software para el hardware orientado a gráficos [The OpenGL Graphics System: A Specification] OpenGL es una especificación de una librería gráfica de bajo nivel [Terry OpenGL linux Tutorial] OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
4 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridIntroducción Características OpenGL Aceleración hardware 3D rápida y completa Efectos 3D en tiempo real niebla anti-aliasing (evita "efecto de sierra" o aliasing) sombras volumétricas bump mapping (detalle de imagen) motion blur (efecto de movimiento) Transparencias Reflexiones texturas 3D ... Innovaciones en software y hardware Extensiones de OpenGL OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
5 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridIntroducción Características OpenGL (continuación) Multiplataforma Windows MacOS Linux/UNIX Dispositivos móviles Estaciones de juegos Simuladores de vuelo ... Estable Primeras versiones desde 1992 High End 3D workstation y supercomputadoras OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
6 2. Operaciones OpenGL 2.1. Fundamentos de OpenGLOpenGL está concebido para renderizar sobre un framebuffer Framebuffer: Zona de memoria especial de lectura / escritura donde se representan todos y cada uno de los píxeles de las imágenes desplegadas en un dispositivo de vídeo. OpenGL Framebuffer Sistema Operativo Usuario OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
7 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid2.1. Fundamentos de OpenGL Órdenes (procedimientos o funciones) para la especificación de objetos geométricos en 2D ó 3D: Primitivas básicas de formas geométricas. Primitivas se definen como un grupo de figuras geométricas formadas por uno o más vértices. Primitivas básicas de OpenGL: Puntos Líneas Polígonos Imágenes Bitmaps OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
8 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid2.1. Fundamentos de OpenGL 2. Operaciones gráficas fundamentales 2D y 3D incluyendo especificación de parámetros: como matrices de transformación, coeficientes de luces, métodos antialiasing, y operadores de actualización de píxeles. 3. Órdenes para render de objetos dentro del framebuffer Rénderizar = Rasterizar = Representar Estas órdenes gestionan cómo los objetos son renderizados (3D => 2D) OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
9 2.2. Sintaxis de las órdenes GLNomenclatura: Órdenes comienzan por “gl” Constantes comienzan por “GL_” Tipos comienzan por “GL” OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
10 2.2. Sintaxis de las órdenes GLÓrdenes incluyen tipos de parámetros: void Vertex3f( float x, float y, float z ); void Vertex2sv( short v[2] ); En general: rtype Name{_1234}{_ b s i f d ub us ui}{_v} ( [args ,] T arg1 , , T argN [, args] ); · “_” indica que no hay ningún carácter · “letras” indican tipos GL OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
11 2.2. Sintaxis de las órdenes GLLas letras definen tipos GL: OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
12 2.2. Sintaxis de las órdenes GLDescripción de tipos GL: OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
13 2.3. Operaciones GL básicasPipeline del proceso de órdenes: OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
14 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid2.4. Errores GL enum GetError( void ); Resumen de Errores: OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
15 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid2.5. Paradigma Begin / End void Begin( enum mode ); void End( void ); OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
16 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridBegin / End Points Define un Vértice mode= POINTS Line Strips Serie de líneas conectadas entre sí. Se definen Vértices mode= LINE STRIP. Line Loops. Se definen Vértices. El último vértice se conecta con el primeo mode= LINE_LOOPS OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
17 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridBegin / End Separate Lines. Líneas separadas Se definen Pares de Vértices (inicio y fin de línea) mode= LINES. Polygons. Se define la frontera igual que Line Loops. mode= POLYGON. Triangle Strips. Se definen vértices y se van formando triángulos adyacentes. Cada vértice se une a los dos anteriores para formar el triángulo. mode= TRIANGLE STRIP. OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
18 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridBegin / End Triangle Fan. Se definen vértices y se van formando triángulos adyacentes. Todos los triángulos comparten el vértice inicial. mode= TRIANGLE FAN. Separate Triangles. Se definen los triángulos agrupando vértices de tres en tres. mode= TRIANGLES. OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
19 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridBegin / End OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
20 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridBegin / End Quadrilateral (quad) strips Se construyen los cuadrados compartiendo dos vértices con el anterior mode=QUAD_STRIP Separate quads Se agrupan los vértices de cuatro en cuatro mode=QUADS OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
21 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridBegin / End Quadrilaterals OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
22 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid2.5.2 Polygon Edges Etiquetar bordes: void EdgeFlag( boolean flag ); void EdgeFlagv( boolean *flag ); Se usa para POLYGON, TRIANGLES, o QUADS Si el flag de arista está activado a TRUE, cada vértice definido comienza una arista etiquetada como “borde” Si el flag de arista está desactivado a FALSE, las aristas definidas están etiquetadas como “no borde” OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
23 2.5.3 Órdenes GL entre pares Begin/EndÓrdenes que especifican coordenadas de vértices Vertex Colores de vértices Color SecondaryColor Index Coordenadas normales Normal Coordenadas de textura TexCoord MultiTexCoord Atributos genéricos de vértices VertexAttrib OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
24 2.5.3 Órdenes GL entre pares Begin/EndCoordenadas de niebla FogCoord Vector de Elementos ArrayElement Órdenes EvalCoord y EvalPoint Órdenes para especificar parámetros iluminación de materiales: Material Órdenes para invocar una display list (lista de órdenes): CallList CallLists Orden EdgeFlag OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
25 2.5.3 Órdenes GL entre pares Begin/EndCualquier otra operación devolverá un error: INVALID_OPERATION Operaciones NO permitidas entre Begin/End: EnableClientState, DisableClientState, PushClientAttrib, PopClientAttrib, ColorPointer, FogCoordPointer, EdgeFlagPointer, IndexPointer, NormalPointer, TexCoordPointer, SecondaryColorPointer, VertexPointer, VertexAttribPointer, ClientActiveTexture,InterleavedArrays y PixelStore Ejecutar un Begin dentro de Begin/End genera error Ejecutar End sin un Begin previo genera error OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
26 2.6. Especificación de VérticesCreación de un vértice en 2, 3 ó 4 coordenadas: void Vertex{234}{sifd}( T coords ); void Vertex{234}{sifd}v( T coords ); Especificar Coordenadas de textura void TexCoord{1234}{sifd}( T coords ); void TexCoord{1234}{sifd}v( T coords ); Especificar Multitextura void MultiTexCoord{1234}{sifd}(enum texture,T coords) void MultiTexCoord{1234}{sifd}v(enum texture,T coords) texture = TEXTUREi Asignar normales void Normal3{bsifd}( T coords ); void Normal3{bsifd}v( T coords ); OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
27 2.6. Especificación de VérticesCoordenadas de Niebla void FogCoord{fd}( T coord ); void FogCoord{fd}v( T coord ); Colores en Modo RGBA void Color{34}{bsifd ubusui}( T components ); void Color{34}{bsifd ubusui}v( T components ); void SecondaryColor3{bsifd ubusui}( T components ); void SecondaryColor3{bsifd ubusui}v( T components ); Colores en Modo color index void Index{sifd ub}( T index ); void Index{sifd ub}v( T index ); OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
28 2.6. Especificación de VérticesCarga de Atributos genéricos de vértices void VertexAttrib{1234}{sfd}( uint index, T values ); void VertexAttrib{123}{sfd}v( uint index, T values ); void VertexAttrib4{bsifd ubusui}v( uint index, T values ); OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
29 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid2.7 Vertex Arrays Datos de vértices almacenados en arrays Espacio del cliente Usados en múltiples primitivas Posibles datos: coordenadas de vértices, normales, colores, colores secundarios, índices de colores, flags de bordes, coordenadas de niebla, coordenadas de texturas, atributos genéricos de vértices. OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
30 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid2.7 Vertex Arrays Para lolalizar y organizar arrays: void VertexPointer( int size, enum type, sizei stride, void *pointer ); void NormalPointer( enum type, sizei stride, void *pointer ); void ColorPointer( int size, enum type, sizei stride, void *pointer ); void SecondaryColorPointer( int size, enum type, sizei stride, void *pointer ); void IndexPointer( enum type, sizei stride, void *pointer); void EdgeFlagPointer( sizei stride, void *pointer ); void FogCoordPointer( enum type, sizei stride, void *pointer ); void TexCoordPointer( int size, enum type, sizei stride, void *pointer ); void VertexAttribPointer( uint index, int size, enum type, boolean normalized, sizei stride, const void *pointer ); OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
31 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid2.8 Buffer Objects Almacenar Datos del cliente en el servidor Construir Buffer void BindBuffer( enum target, uint buffer ); Borrar Buffer void DeleteBuffers( sizei n, const uint *buffers ); Obtener n buffers anteriores no utilizados void GenBuffers( sizei n, uint *buffers ); Almacenar datos void BufferData( enum target, sizeiptr size, const void *data, enum usage ); Modificar datos void BufferSubData( enum target, intptr offset, sizeiptr size, const void *data ); Actualizar cliente void *MapBuffer( enum target, enum access ); boolean UnmapBuffer( enum target ); OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
32 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid2.9 Rectangles A partir de dos esquinas: void Rect{sifd}( T x1, T y1, T x2, T y2 ); void Rect{sifd}v( T v1[2], T v2[2] ); Ejemplo: Rect (x1, y1, x2, y2); Equivalente a: Begin(POLYGON); Vertex2(x1, y1); Vertex2(x2, y1); Vertex2(x2, y2); Vertex2(x1, y2); End(); OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
33 2.10 Transformaciones de coordenadasCoordenadas de vértices, normales y texturas se transforman antes de que se usen para producir una imagen en el framebuffer. OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
34 2.10 Transformaciones de coordenadasCoordenadas de objeto, coordenadas de ojo, y coordenadas de clip son 4-D: (x, y, z, w) La matriz del modelo de vista y la matriz de proyección son de tamaño 4x4 Coordenadas de objeto Coordenadas de ojo = M donde M es la matriz del modelo de vista Xe ye ze we X0 y0 z0 w0 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
35 2.10 Transformaciones de coordenadasCoordenadas de ojo Coordenadas de clip = P donde P es la matriz del proyección Coordenadas normalizadas: = Xc yc zc wc Xe ye ze we xd yd zd xc/wc yc/wc zc /wc OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
36 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridControl del viewport La transformación al campo de visualización (viewport transformation) se determina por: ancho y alto en píxeles: (px, py) Centro de referencia: (ox, oy) Las coordenadas de ventana se calculan: = donde f y n [0,1] se establecen mediante: void DepthRange( clampd n, clampd f ); xw yw zw (px / 2 )xd + ox (py / 2 )yd + oy [(f − n)/2] zd + (n + f)/2 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
37 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridControl del viewport Los parámetros de configuración del viewport se especifican mediante: void Viewport( int x, int y, sizei w, sizei h ); donde: (x, y): esquina inferior izquierda de la ventana (w, h): ancho y alto de ventana A partir de estos valores calculamos el resto de parámetros del viewport: ox = x + w/2 oy = y + h/2 px = w py = h OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
38 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridMatrices Elección de la matriz a modificar void MatrixMode( enum mode ); donde: mode = TEXTURE, MODELVIEW, COLOR, PROJECTION Modificación de matrices: void LoadMatrix{fd}( T m[16] ); //Intercambia matriz void MultMatrix{fd}( T m[16] ); //Multiplica matriz a1 a5 a9 a13 m = a2 a6 a10 a14 a3 a7 a11 a15 a4 a8 a12 a16 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
39 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridMatrices Transpuesta: LoadTransposeMatrix[fd](m); LoadMatrix[fd](mT ); Multiplicar matriz transpuesta: MultTransposeMatrix[fd](m); MultMatrix[fd](mT ); Cargar Identidad: void LoadIdentity( void ); Manipular Matrices: void Rotate{fd}( T , T x, T y, T z ); : ángulo en grados v = (x y z): vector de giro OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
40 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridMatrices Manipular Matrices (continuación) void Rotate{fd}( T , T x, T y, T z ); : ángulo en grados v = (x y z): vector de giro void Translate{fd}( T x, T y, T z ); void Scale{fd}( T x, T y, T z ); void Frustum( double l, double r, double b, double t, double n, double f ); donde: (l b − n), (r t − n) coordenadas de clipping cercanas (l b − f), (r t − f) coordenadas de clipping lejanas Matriz de proyección paralela: void Ortho(double l, double r, double b, double t, double n, double f); OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
41 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridMatrices Activar textura: void ActiveTexture( enum texture ); Almacenar matrices en la pila void PushMatrix( void ); void PopMatrix( void ); Reescalado y normalización: void Enable( enum target ); void Disable( enum target ); Generar coordenadas de textura: void TexGen{ifd}( enum coord, enum pname, T param ); void TexGen{ifd}v( enum coord, enum pname, T params ); pname:TEXTURE_GEN_MODE, OBJECT_PLANE, EYE_PLANE params: valores ó OBJECT_LINEAR, EYE_LINEAR (por defecto), SPHERE_MAP, REFLECTION_MAP, NORMAL_MAP. OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
42 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid2.11 Clipping Las primitivas son ajustadas al volumen de corte (clip volume). Volumen de vista (view volume) viene definido por: − wc xc wc − wc yc wc − wc zc wc Por defecto, el volumen de corte es el volumen de vista Se puede definir un plano de corte cliente: void ClipPlane( enum p, double eqn[4] ); p: identifica plano de corte cliente CLIP_PLANEi, i [0,.., n-1] eqn: coeficientes de la ecuación de un plano en coordenadas de objeto: (p1, p2, p3, p4) OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
43 2.12 Current Raster PositionLa posición actual de renderizado se puede obtener mediante: void RasterPos{234}{sifd}( T coords ); void RasterPos{234}{sifd}v( T coords ); Se usa por órdenes que afectan directamente a los píxeles del framebuffer Se puede modificar la posición actual: void WindowPos{23}{ifds}( T coords ); void WindowPos{23}{ifds}v( const T coords ); OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
44 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
45 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid2.13 Colores Proceso de colores RGBA e índices de color anterior a la rasterización: OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
46 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridIluminación La iluminación de OpenGL calcula los colores por vértices Sentido de la luz (front color / back color) : void FrontFace( enum dir ); Aplica la dirección en el sentido de las agujas del reloj o al contrario (igual que los polígonos): CCW (counter-clockwise orientation) OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
47 2.13.2 Especificación de parámetros de luzvoid Material{if}( enum face, enum pname, T param ); void Material{if}v( enum face, enum pname, T params ); void Light{if}( enum light, enum pname, T param ); void Light{if}v( enum light, enum pname, T params ); void LightModel{if}( enum pname, T param ); void LightModel{if}v( enum pname, T params ); pname: identifica el parámetro a modificar face: FRONT, BACK ó FRONT_AND_BACK, light: LIGHTi, i [0,.., n-1], identifica una luz concreta. OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
48 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
49 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridColorMaterial Es posible aplicar más de una propiedad de material El modo se selecciona mediante: void ColorMaterial( enum face, enum mode ); face: FRONT, BACK, ó FRONT_AND_BACK, mode: EMISSION, AMBIENT, DIFFUSE, SPECULAR, ó AMBIENT_AND_DIFFUSE Ejemplo: ColorMaterial(FRONT, AMBIENT) OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
50 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
51 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid3. Rasterización Rasterización (= renderización = representación) es el proceso por el cual una primitiva es transformada en una imagen de dos dimensiones Cada punto de esta imagen contiene información como color y profundidad (número de bits de colores) El proceso consiste en dos pasos: Determinar qué zona (conjunto de píxeles) en coordenadas de ventana está ocupada por la primitiva. Asignar un valor de profundidad y uno o más valores de color para cada píxel. OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
52 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid3. Rasterización OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
53 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid3. Rasterización 3.1. Puntos void PointSize( float size ); Rasterización punto: desfase OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
54 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid3.1. Puntos OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
55 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid3.2. Segmentos void LineWidth( float width ); OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
56 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid3.3. Polígonos void CullFace( enum mode ); Mode = FRONT, BACK ó FRONT_AND_BACK OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
57 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid3.4. Bitmaps void Bitmap( sizei w, sizei h, float xbo, float ybo, float xbi, float ybi, ubyte *data ); OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
58 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid3.5. Texturas Especificación de la imagen de textura void TexImage3D( enum target, int level, int internalformat, sizei width, sizei height, sizei depth, int border, enum format, enum type, void *data ); target = TEXTURE 3D, or PROXY TEXTURE 3D format, type, y data: argumentos para DrawPixels void DrawPixels( sizei width, sizei height, enum format, enum type, void *data ); Tamaño imagen: width, height Nivel de detalle: level void TexImage2D( enum target, int level, int internalformat, sizei width, sizei height, int border, enum format, enum type, void *data ); void TexImage1D( enum target, int level, int internalformat, sizei width, int border, enum format, enum type, void *data ); OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
59 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid3.5. Texturas OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
60 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid3.5. Texturas Modificar una región rectangular: void TexSubImage3D( enum target, int level, int xoffset, int yoffset, int zoffset, sizei width, sizei height, sizei depth, enum format, enum type, void *data ); void TexSubImage2D( enum target, int level, int xoffset, int yoffset, sizei width, sizei height, enum format, enum type, void *data ); void TexSubImage1D( enum target, int level, int xoffset, sizei width, enum format, enum type, void *data ); void CopyTexSubImage3D( enum target, int level, int xoffset, int yoffset, int zoffset, int x, int y, sizei width, sizei height ); void CopyTexSubImage2D( enum target, int level, int xoffset, int yoffset, int x, int y, sizei width, sizei height ); void CopyTexSubImage1D( enum target, int level, int xoffset, int x, int y, sizei width ); OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
61 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid3.5. Texturas Imágenes comprimidas: void CompressedTexImage1D( enum target, int level, enum internalformat, sizei width, int border, sizei imageSize, void *data ); void CompressedTexImage2D( enum target, int level, enum internalformat, sizei width, sizei height, int border, sizei imageSize, void *data ); void CompressedTexImage3D( enum target, int level, enum internalformat, sizei width, sizei height, sizei depth, int border, sizei imageSize, void *data ); GetCompressedTexImage Crear una textura: void BindTexture( enum target, uint texture ); OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
62 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid3.5. Texturas Parámetros de textura: void TexParameter{if}( enum target, enum pname, T param ); void TexParameter{if}v( enum target, enum pname, T params ); target = TEXTURE 1D, TEXTURE 2D, TEXTURE 3D, o TEXTURE CUBE MAP. pname: parámetro a modificar params: valores OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
63 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
64 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid3.5. Texturas Entorno de textura void TexEnv{if}( enum target, enum pname, T param ); void TexEnv{if}v( enum target, enum pname, T params ); OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
65 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid3.5. Texturas Borrar texturas: void DeleteTextures( sizei n, uint *textures ); Texturas no utilizadas: void GenTextures( sizei n, uint *textures ); OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
66 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridReferencias The OpenGL Graphics System: A Specification (Version October 22, 2004) Mark Segal, Kurt Akeley OpenGL Getting Started FAQ OpenGL Win32 Tutorial Terry OpenGL linux Tutorial Nehe Tutorial OpenGL & OpenGL Utilities Specification Página Principal Máster: Página Principal Máster - OpenGL: OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid
67 OpenGL – Gonzalo Mariscal Vivas – Universidad Europea MadridBibliografía The OpenGL Reference Manual: The Official Reference Document to OpenGL, Version 1.2 (3rd Edition) (Paperback) by Dave Shreiner, Opengl Architecture Review Board The OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 1.2 (3rd Edition) (Paperback) by Mason Woo OpenGL – Gonzalo Mariscal Vivas – Universidad Europea Madrid