|
|
Línea 1: |
Línea 1: |
− | {{:Usuario:ManuelRomero/grafica/escena1/nav}} <br> | + | {{:Usuario:ManuelRomero/grafica/escena1/nav}} |
| + | <br> |
| + | {{#widget:Slides}} |
| | | |
− | === Coordenadadas del objeto:La matriz escena === | + | <div class="slides layout-regular template-default"> |
| | | |
| + | <div class="slide"> |
| + | === Coordenadadas del objeto:'''''La matriz escena''''' === |
| #Coordenadas globales o del mundo | | #Coordenadas globales o del mundo |
| #Coordenadas locales o del objeto | | #Coordenadas locales o del objeto |
− |
| |
| *Dibujamos un eje de coordenadas x,y,z. | | *Dibujamos un eje de coordenadas x,y,z. |
| *Estará centrado en el punto 0,0,0 | | *Estará centrado en el punto 0,0,0 |
− | | + | </div> |
− | </div>
| + | |
| <div class="slide"> | | <div class="slide"> |
| | | |
Línea 15: |
Línea 17: |
| | | |
| ;El código fuente | | ;El código fuente |
− |
| |
| <source lang="cpp"> | | <source lang="cpp"> |
| void dibujaCoordenadas(void){ | | void dibujaCoordenadas(void){ |
Línea 25: |
Línea 26: |
| glVertex3f(0,0,0); | | glVertex3f(0,0,0); |
| glVertex3f(15,0,0); | | glVertex3f(15,0,0); |
− |
| |
| glColor3f(0,1,0);//Eje Y | | glColor3f(0,1,0);//Eje Y |
| glVertex3f(0,0,0); | | glVertex3f(0,0,0); |
Línea 37: |
Línea 37: |
| } | | } |
| </source> | | </source> |
− | </div> <div class="slide"> | + | </div> |
− | === Coordenadadas del objeto === | + | <div class="slide"> |
| + | === Veamos la imagen === |
| | | |
| *A OpenGL le especificamos bien por puntos o por vectores estos valores | | *A OpenGL le especificamos bien por puntos o por vectores estos valores |
Línea 44: |
Línea 45: |
| | | |
| [[Image:CoordenadasOpenGLBásico.png|200px]] | | [[Image:CoordenadasOpenGLBásico.png|200px]] |
− | </div> <div class="slide"> | + | </div> |
− | === Coordenadadas del objeto === | + | <div class="slide"> |
− | | + | === Giramos === |
− | ;giramos para ver mejor
| + | |
− | | + | |
| *Lo giramos para ver la coordenada z. Esta parte luego la veremos | | *Lo giramos para ver la coordenada z. Esta parte luego la veremos |
| *Para conseguirlo he girado 40º en el eje de x y 40º en el eje de y | | *Para conseguirlo he girado 40º en el eje de x y 40º en el eje de y |
− |
| |
| <source lang="cpp"> | | <source lang="cpp"> |
| .. .. .. | | .. .. .. |
Línea 61: |
Línea 59: |
| .. .. .. | | .. .. .. |
| </source> | | </source> |
− | </div> <div class="slide"> | + | </div> |
| + | <div class="slide"> |
| === Coordenadas del objeto === | | === Coordenadas del objeto === |
− |
| |
| [[Image:CoordenadasOpenGL.png|200px]] | | [[Image:CoordenadasOpenGL.png|200px]] |
− | | + | </div> |
| *Este eje de coordenadas que hemos dibujado representaría el eje de coordenadas del objeto | | *Este eje de coordenadas que hemos dibujado representaría el eje de coordenadas del objeto |
| *Ahora dibujamos un objeto en él, por ejemplo una tetera | | *Ahora dibujamos un objeto en él, por ejemplo una tetera |
Eje de coordenadas del objeto
- En realidad el objeto está en una posición del espacio con sus coordenadas
- La idea es llevármelo a las coordenadas del mundo, para mi de referencia
- Planteamos este nuevo eje de coordenadas
- Podemos ver que respecto al eje de coordenadas del mundo (0,0,0), tiene los siguientes vectores
(10,10,10)- (15,15,10)
(10,10,10)- (5,15,10)
(10,10,10)- (10,10,15)
===Vamos a ver como pasar el objeto a las coordenadas locales
- Para ello vamos a multiplicar cada vétice del objeto por una matriz de escena
- Esta matriz permite realizar operaciones de rotación traslación y escalado
- En nuestro caso queremos coger la tetera y
- Trasladarla al punto 10,10,10.
- trasladar 10 unidades en X
- trasladar 10 unidades en Y
- trasladar 10 unidades en Z
- Rotar 45 grados
Son en total 4 operaciones
.. ... ..
//Roto la tetera para llegar al eje de coordenadas del objeto
glTranslatef(10,10,10);
glRotated(45,0,0,1);
glutWireTeapot(3);
glFlush();
.. .. ..
Resumen
- En la escena tengo unos objetos
- Cada uno tiene sus coordenadas coordenadas del objeto
- Paso estas coordenadas a las coordenadas del mundo
- Para ello multiplico por la matriz M que llamaremos matriz de escena
- Sistema de coordenadas en que se define la escena. Define cómo se colocan los diferentes objetos en la escena.
- La matriz de escena lleva movimientos de rotación traslación, giro, simetria, ...
|
(X,Y,Z)mundo =(X,Y,Z)objeto * Mescena
La matriz de escena
- En openGL especificamos que trabajamos con la matriz
.. .. ..
glMatrixMode(GL_MODELVIEW);
.. .. ..
- Tenemos dos tipos de matrices
- Esta es la matriz Modelo Vista
- Hasta ahora hemos especificado la parte del modelo o de la escena con rotaciones y traslaciones
- Para realizar estas operaciones usamos las primitivas de openGL
.. .. ..
glRotatef(alpha,x,y,z);//rota ''alpha'' grados entorno al eje especificado ''x,y,x''
glTranslatef(x,y,z); //Traslada la imagen x,y,z
glScalef(sx,sy,xz);//Multiplica la matriz de escalado los factores sx,sy,xz.
.. .. ..
- Vemos ahora dos objetos y los desplazamos
Archivo:DosObjetos.png
Archivo:DosObjetosDesplazados.png
- Si solo queremos desplazar un objeto respecto a otro
- Entonces debemos mantener diferentes matrices de transformación a difernetes objetos de nuestra escena
- Dibujamos un objeto
- Lo desplazamos con M1
- Recuperamos la matriz anterior
- La aplicamos a los nuevos objetos
- Lo vemos en las imágenes
- Desplazamiento entre objetos
- OpenGL dispone de una pila para las matrices
- Para guardar/recuperar matrices:
glPushMatrix();//Guarda la matriz en la pila acutal
glPopMatriz();//Recupera la matriz de la pila.
- Estas funciones trabajan con la matriz actual.
- El código asociado
void trasladaCubo(){
static int i =0;
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
glColor3f(1,0,0);
glPopMatrix();
glPushMatrix();
dibujaCoordenadas();
glutWireSphere(2,30,30);
glTranslatef(0,5+i++,0);
glutWireCube(2);
glFlush();
}