Upload
ronald-sanchez-ferrer
View
5
Download
0
Embed Size (px)
DESCRIPTION
diapos de computacion grafica y visual
Citation preview
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)