computacion grafica
DESCRIPTION
diapos de computacion grafica y visualTRANSCRIPT
-
Ing. Jos Luis Peralta Lujn
COMPUTACION GRFICA Y VISUAL
-
Ing. Jos Luis Peralta Lujn
Traslacin
-
Ing. Jos Luis Peralta Lujn
x
y
z
// Trasladar 10 unidades hacia arribaglTranslatef (0.0f, 10.0f, 0.0f);
// Dibuja el cuboglutSolidCube (10.0f);
x
y
z
Para construir una matriz de traslacin:void glTranslatef (GLfloat x, GLfloat y, GLfloat z)
-
Ing. Jos Luis Peralta Lujn
Rotacin
-
Ing. Jos Luis Peralta Lujn
x
y
z
Para construir una matriz de rotacin:void glRotatef (GLfloat ang, GLfloat x, GLfloat y, GLfloat z)
// Rotar 45 grados en el eje yglRotatef (45.0f, 0.0f, 1.0f, 0.0f);
// Dibuja el cuboglutSolidCube (10.0f);
x
y
z
-
Ing. Jos Luis Peralta Lujn
Escalado
-
Ing. Jos Luis Peralta Lujn
x
y
z
Para construir una matriz de escalado:void glScalef (GLfloat x, GLfloat y, GLfloat z)
// Escalar el doble en verticalglScalef (1.0f, 2.0f, 1.0f);
// Dibuja el cuboglutSolidCube (10.0f);
x
y
z
-
Ing. Jos Luis Peralta Lujn
Orden de las Transformaciones
-
Ing. Jos Luis Peralta Lujn
-
Ing. Jos Luis Peralta Lujn
Ejemplo
-
Ing. Jos Luis Peralta Lujn
-
Ing. Jos Luis Peralta Lujn
-
Ing. Jos Luis Peralta Lujn
-
Ing. Jos Luis Peralta Lujn
Ejemplo con OpenGL
-
Ing. Jos Luis Peralta Lujn
-
Ing. Jos Luis Peralta Lujn
glRotatef(45,0,0,1);
glTranslatef(10,0,0);
glRectf(-5,-5,5,5);
x
y
x'y'
=
100001000021/21/0021/21/
M
x
yx'
y'
P
=
==
10
25210
105
5
10000100
210/021/21/210/021/21/
PMP
=
=
10000100
210/021/21/210/021/21/
100001000010
10001
MM
x
yx'
y'
//Segunda Transformacin que se aplica
//Primera Transformacin que se aplica
-
Ing. Jos Luis Peralta Lujn
Otro Ejemplo con OpenGL
-
Ing. Jos Luis Peralta Lujn
-
Ing. Jos Luis Peralta Lujn
Funciones de Matrices
-
Ing. Jos Luis Peralta Lujn
glLoadIdentity(void)
glLoadMatrix{fd}(cont TYPE *m)
glMultMatrix{fd}(cont TYPE *m)
=
161284
151173
141062
13951
mmmm
mmmm
mmmm
mmmm
M
-
Ing. Jos Luis Peralta Lujn
glMatrixMode(GL_MODELVIEW);glLoadIdentity();glMultMatrixf(M1);glMultMatrixf(M2);glMultMatrixf(M3); Se aplica al vector v:
M1M2M3v = [M1[M2[M3v]]]
Nota: en realidad se aplica: [M1M2M3]v
-
Ing. Jos Luis Peralta Lujn
Reiniciar la Matriz de Modelado
-
Ing. Jos Luis Peralta Lujn
Si quisiramos obtener esta escena, no podemos hacer esto
// Sube 10 unidades en yglTranslatef (0.0f, 10.0f, 0.0f);
// Dibuja el primer cuboglutSolidCube (1.0f);
// Mueve 10 unidades en xglTranslatef (10.0f, 0.0f, 0.0f);
// Dibuja el segundo cuboglutSolidCube (1.0f);
porque obtendramos esto:
x
y
z
10
10
x
y
z
10
10
-
Ing. Jos Luis Peralta Lujn
Necesitamos una forma de resetear la matriz de modeladovoid glLoadIdentity()
El cdigo correcto sera:// Inicializa la matriz del modeladorglMatrixMode (GL_MODELVIEW);glLoadIdentity();// Sube 10 unidades en yglTranslatef (0.0f, 10.0f, 0.0f);// Dibuja el primer cuboglutSolidCube (1.0f);// Reinicia de nuevo la matrizglLoadIdentity();// Mueve 10 unidades en xglTranslatef (10.0f, 0.0f, 0.0f);// Dibuja el segundo cuboglutSolidCube (1.0f);
x
y
z
10
10
-
Ing. Jos Luis Peralta Lujn
Pila de Matrices
-
Ing. Jos Luis Peralta Lujn
No siempre es deseable reiniciar por completo la matrizde modelado
A veces es preferible querer almacenar la matriz actual, yvolverla a recuperar ms adelante
OpenGL mantiene una pila de matrices
Para conocer la profundidad mxima de la pila:glGet(GL_MAX_MODELVIEW_STACK_DEPTH)
-
Ing. Jos Luis Peralta Lujn
glPushMatrix(void)
glPopMatrix(void)