Diferencia entre revisiones de «ManuelRomero/grafica/escena1/objeto»

De WikiEducator
Saltar a: navegación, buscar
(Eje de coordenadas del objeto)
(Eje de coordenadas del objeto)
Línea 130: Línea 130:
 
Para ello multiplico por la matriz M de escena
 
Para ello multiplico por la matriz M de escena
 
(x,y,z)mundo = (x,y,z)objeto M escena
 
(x,y,z)mundo = (x,y,z)objeto M escena
<math>(x,y,z)_{mudo}=(X,Y,Z)_{objeto} * M_{escena}</math>
 
 
 
Sistema de coordenadas en que se define la escena. Define cómo se colocan los diferentes objetos en la escena.
 
Sistema de coordenadas en que se define la escena. Define cómo se colocan los diferentes objetos en la escena.
 
 
(x, y, z, w)T mundo = (x, y, z, w)Tobjeto ·Mescena
 
 
 
 
 
Mescena pasa de coordenadas objeto a coordenadas mundo (rotaciones, translaciones, escalados… )
 
Mescena pasa de coordenadas objeto a coordenadas mundo (rotaciones, translaciones, escalados… )
 
}}
 
}}
 +
<math>(x,y,z)_{mudo}=(X,Y,Z)_{objeto} * M_{escena}</math>
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">

Revisión de 10:25 12 jun 2013



Coordenadadas del objeto

  1. Coordenadas globales o del mundo
  2. Coordenadas locales o del objeto
  • Dibujamos un eje de coordenadas x,y,z.
  • Estará centrado en el punto 0,0,0

</div>

Coordenadadas del objeto

El código fuente
void dibujaCoordenadas(void){
	porFlechitas();
	glLineWidth(2);
	glBegin(GL_LINES);
	   glLineWidth(3);
	   glColor3f(1,0,0);//Eje X
	   glVertex3f(0,0,0);
	   glVertex3f(15,0,0);
 
	   glColor3f(0,1,0);//Eje Y
	   glVertex3f(0,0,0);
	   glVertex3f(0,15,0);
       glColor3f(0,0,1);//Eje Z
	   glVertex3f(0,0,0);
	   glVertex3f(0,0,15);
	   glLineWidth(1);
	glEnd();
	glFlush();
}

Coordenadadas del objeto

  • A OpenGL le especificamos bien por puntos o por vectores estos valores
  • OpenGL rederiza en la pantalla y visualiza dichos puntos según le especifiquemos

CoordenadasOpenGLBásico.png

Coordenadadas del objeto

giramos para ver mejor
  • 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
  .. .. ..
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();   
    glRotatef(40.0f,1,0,0);
    glRotatef(40.0f,0,1,0);
    glutPostRedisplay();
  .. .. ..

Coordenadas del objeto

CoordenadasOpenGL.png

  • 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
  • con la barra espaciadora podemos cambiar su representación, sólida o de alambres
  • Representación sólida

Tetera1.png

  • Represetnación en alambres

Tetera2.png

  • Representación girada

Tetera3.png

  • Ahora hemos dibujado la tetera respecto al eje de coordenadas del mundo

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)
  • Gráficamente lo podemos ver en la imagen (siempre respecto al eje de coordenadas de nuestro mundo (0,0,0) como centro

CoordenadasObjeto1.png

  • Lo giramos para ver el componente z (Se observa en diferente posición pues lo he rotado respecto a X e Y de las coordenadas del mundo no de ella misma

CoordenadasObjeto2.png

  • Vemos los dos ejes de coordenadas

CoordenadasObjeto3.png

  • Lo giramos para verlo un poco mejor
  • Vemos el objeto en el eje de coordenadas del mundo global y lo queremos pasar al eje de coordenadas del mundo local o del objeto

CoordenadasObjeto4.png

===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
  1. Trasladarla al punto 10,10,10.
    1. trasladar 10 unidades en X
    2. trasladar 10 unidades en Y
    3. trasladar 10 unidades en Z
  2. Rotar 45 grados

Son en total 4 operaciones CoordenadasMundoObjeto.png

.. ... .. 
  //Roto la tetera para llegar al eje de coordenadas del objeto
		  glTranslatef(10,10,10);
		  glRotated(45,0,0,1);
		  glutWireTeapot(3);
		  glFlush();
.. .. ..


Icon summary.gif

Resumen

{{{1}}}


[math](x,y,z)_{mudo}=(X,Y,Z)_{objeto} * M_{escena}[/math]