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

De WikiEducator
Saltar a: navegación, buscar
(Uso de la función gluLookAt(...))
 
(2 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
 
{{:Usuario:ManuelRomero/grafica/escena1/nav}}
 
{{:Usuario:ManuelRomero/grafica/escena1/nav}}
 
<br>
 
<br>
 +
 +
{{#widget:Slides}}
 +
 +
<div class="slides layout-regular template-default">
 +
 +
<div class="slide">
  
 
===Coordenadas del ojo:La matriz punto de vista===
 
===Coordenadas del ojo:La matriz punto de vista===
Línea 8: Línea 14:
 
*Esta metáfora permite representar la forma en la que openGL va a represtar la escena dependiendo del punto de vista
 
*Esta metáfora permite representar la forma en la que openGL va a represtar la escena dependiendo del punto de vista
 
*La cámara son nuestros ojos virtuales
 
*La cámara son nuestros ojos virtuales
 +
</div>
 +
<div class="slide">
 +
 
{{Definicion|Las coordenadas del ojo define la escena respecto al punto de vista de la cámara}}
 
{{Definicion|Las coordenadas del ojo define la escena respecto al punto de vista de la cámara}}
 
'''''(X,Y,Z,W)'''''<sup>T</sup><sub>punto_de_vista</sub>='''''(X,Y,Z,W)'''''<sup>T</sup> * M<sub>mundo</sub>*'''''
 
'''''(X,Y,Z,W)'''''<sup>T</sup><sub>punto_de_vista</sub>='''''(X,Y,Z,W)'''''<sup>T</sup> * M<sub>mundo</sub>*'''''
</div>
 
 
*Para hacer esto en openGL, disponemos de la funcion
 
*Para hacer esto en openGL, disponemos de la funcion
 
  void gluLookAt(eyeX, eyeY, eyeZ, cenX,cenY,cenZ, atX, atY,atZ);
 
  void gluLookAt(eyeX, eyeY, eyeZ, cenX,cenY,cenZ, atX, atY,atZ);
 +
</div>
 +
<div class="slide">
 +
 
*Esta función determina dónde y cómo está dispuesta la cámara.
 
*Esta función determina dónde y cómo está dispuesta la cámara.
 
*Antes de llamar a esta función debe estar activa la ''matriz ModeloVista''
 
*Antes de llamar a esta función debe estar activa la ''matriz ModeloVista''
 
*Esta función se aplica sobre la matriz ModeloVista
 
*Esta función se aplica sobre la matriz ModeloVista
 
'''''M='''''M'''''<sub>escena</sub> * M<sub>punto_vista</sub>'''''
 
'''''M='''''M'''''<sub>escena</sub> * M<sub>punto_vista</sub>'''''
 +
</div>
 +
<div class="slide">
 +
 
===Uso de la función '''''gluLookAt(...)===
 
===Uso de la función '''''gluLookAt(...)===
 
Esta función tiene tres grupos de parámetros
 
Esta función tiene tres grupos de parámetros
Línea 28: Línea 42:
 
  Este vector permite girar la cámara
 
  Este vector permite girar la cámara
 
  Es perpendicular al vector hacia donde miramos
 
  Es perpendicular al vector hacia donde miramos
 +
</div>
 +
<div class="slide">
 +
 
*Vamos a llevar este ejemplo a la práctica
 
*Vamos a llevar este ejemplo a la práctica
*Si tenemos nuestro eje de coordenadas y queremos mirar desde el punto 10,10,10 hacia el 0,0,0 u el vector de orientación en el plano  X (10,0,0)
+
*Si tenemos nuestro eje de coordenadas y queremos mirar desde el punto 10,10,10 hacia el 0,0,0  
 +
*En cada imagen vamos cambiando la oreientación de la cámara
 +
**10,0,0
 +
**0,10,0
 +
**0,0,10
 
<gallery caption="coordenaas del ojo en posicion 10,10,10>
 
<gallery caption="coordenaas del ojo en posicion 10,10,10>
 
Imagen:tetera2.png
 
Imagen:tetera2.png
Línea 35: Línea 56:
 
Imagen:coordenadasOjoTeteraY.png
 
Imagen:coordenadasOjoTeteraY.png
 
Imagen:coordenadasOjoTeteraZ.png
 
Imagen:coordenadasOjoTeteraZ.png
<gallery>
+
</gallery>
 +
</div>
 +
<div class="slide">
 +
 
 +
*El código de cada una de estas imágenes
 +
*Respecto al eje X
 +
<source lang=cpp>
 +
  //Ponemos un punto de vista respecto al eje X
 +
  glMatrixMode(GL_MODELVIEW);
 +
  glClear(GL_COLOR_BUFFER_BIT);
 +
  glPopMatrix();
 +
  glPushMatrix();
 +
  gluLookAt(10,10,10,0,0,0,10,0,0);
 +
  dibujaCoordenadas();
 +
  glutWireTeapot(3);
 +
  glFlush();
 +
</source>
 +
</div>
 +
<div class="slide">
 +
 
 +
*Respecto al eje Y
 +
<source lang=cpp>
 +
  //Ponemos un punto de vista respecto al eje X
 +
  glMatrixMode(GL_MODELVIEW);
 +
  glClear(GL_COLOR_BUFFER_BIT);
 +
  glPopMatrix();
 +
  glPushMatrix();
 +
  gluLookAt(10,10,10,0,0,0,0,10,0);
 +
  dibujaCoordenadas();
 +
  glutWireTeapot(3);
 +
  glFlush();
 +
</source>
 +
</div>
 +
<div class="slide">
 +
 
 +
*Respecto al eje Z
 +
<source lang=cpp>
 +
  //Ponemos un punto de vista respecto al eje X
 +
  glMatrixMode(GL_MODELVIEW);
 +
  glClear(GL_COLOR_BUFFER_BIT);
 +
  glPopMatrix();
 +
  glPushMatrix();
 +
  gluLookAt(10,10,10,0,0,0,0,0,10);
 +
  dibujaCoordenadas();
 +
  glutWireTeapot(3);
 +
  glFlush();
 +
</source>
 +
</div>
 +
<div class="slide">
 +
 
 +
===Otro punto de vista===
 +
*Ahora vamos a poner el punto de vista donde estaba el objeto en un principio
 +
*En las coordenadas del objeto
 +
*Y miraremos a nuestro objeto llevado al centro 0,0,0
 +
<gallery captio=punto de vista en coordenadas del objeto>
 +
imagen:CoordenadasObjeto3.png
 +
imagen:CoordenadasObjeto5.png
 +
imagen:CoordenadaOjoTeteraObjeto.png
 +
</gallery>
 +
</div>
 +
<div class="slide">
 +
 
 +
*El código lleva dos acciones
 +
*Primero dibujo los ejes de corrdenadas (local y global) o del mundo y del objeto ''opcion b''
 +
*Después pongo establezco con la función gluLookAt(..) las coordenadas del punto de vista
 +
*Y desde ahí observo el objeto ''opción c''
 +
<source lang=cpp>
 +
  case'b':
 +
    //Respecto al eje del donde estaba el objeto
 +
glClear(GL_COLOR_BUFFER_BIT);
 +
dibujaCoordenadas();
 +
dibujaCoordenadasObjeto();
 +
glFlush();
 +
break;
 +
  case'c':
 +
  //Esta opción que se ejecuta después de b
 +
glClear(GL_COLOR_BUFFER_BIT);
 +
glMatrixMode(GL_MODELVIEW);
 +
glPopMatrix();
 +
glPushMatrix();
 +
gluLookAt(10,10,10,0,0,0,5,5,0);
 +
    dibujaCoordenadas();
 +
glutWireTeapot(3);
 +
glFlush();
 +
        break;
 +
</source>
 +
</div>
 +
<div class="slide">

Última revisión de 13:20 13 jun 2013



Coordenadas del ojo:La matriz punto de vista

  • Ahora tenemos el objeto respecto a una coordenadas del mundo
  • Tenemos que poner el ojo en alguna posicion de la escena
  • Para ello colocamos una cámara y hacemos una foto desde esa posición
  • Esta metáfora permite representar la forma en la que openGL va a represtar la escena dependiendo del punto de vista
  • La cámara son nuestros ojos virtuales



Icon define.gif

Definición

Las coordenadas del ojo define la escena respecto al punto de vista de la cámara


(X,Y,Z,W)Tpunto_de_vista=(X,Y,Z,W)T * Mmundo*

  • Para hacer esto en openGL, disponemos de la funcion
void gluLookAt(eyeX, eyeY, eyeZ, cenX,cenY,cenZ, atX, atY,atZ);
  • Esta función determina dónde y cómo está dispuesta la cámara.
  • Antes de llamar a esta función debe estar activa la matriz ModeloVista
  • Esta función se aplica sobre la matriz ModeloVista

M=Mescena * Mpunto_vista

Uso de la función gluLookAt(...)

Esta función tiene tres grupos de parámetros

void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ);
punto eyeX, eyeY, eyeZ
  • Es el punto central donde ponemos nuestra cámara ficticia.
punto centerX,centerY,centerZ
  • Es el punto hacia donde miramos
Sería el vector formado por los puntos   ojo-center
vector upX,upY,upZ
Este vector permite girar la cámara
Es perpendicular al vector hacia donde miramos
  • Vamos a llevar este ejemplo a la práctica
  • Si tenemos nuestro eje de coordenadas y queremos mirar desde el punto 10,10,10 hacia el 0,0,0
  • En cada imagen vamos cambiando la oreientación de la cámara
    • 10,0,0
    • 0,10,0
    • 0,0,10
  • El código de cada una de estas imágenes
  • Respecto al eje X
  //Ponemos un punto de vista respecto al eje X
  glMatrixMode(GL_MODELVIEW);
  glClear(GL_COLOR_BUFFER_BIT);
  glPopMatrix();
  glPushMatrix();
  gluLookAt(10,10,10,0,0,0,10,0,0);
  dibujaCoordenadas();
  glutWireTeapot(3);
  glFlush();
  • Respecto al eje Y
  //Ponemos un punto de vista respecto al eje X
  glMatrixMode(GL_MODELVIEW);
  glClear(GL_COLOR_BUFFER_BIT);
  glPopMatrix();
  glPushMatrix();
  gluLookAt(10,10,10,0,0,0,0,10,0);
  dibujaCoordenadas();
  glutWireTeapot(3);
  glFlush();
  • Respecto al eje Z
  //Ponemos un punto de vista respecto al eje X
  glMatrixMode(GL_MODELVIEW);
  glClear(GL_COLOR_BUFFER_BIT);
  glPopMatrix();
  glPushMatrix();
  gluLookAt(10,10,10,0,0,0,0,0,10);
  dibujaCoordenadas();
  glutWireTeapot(3);
  glFlush();

Otro punto de vista

  • Ahora vamos a poner el punto de vista donde estaba el objeto en un principio
  • En las coordenadas del objeto
  • Y miraremos a nuestro objeto llevado al centro 0,0,0
  • El código lleva dos acciones
  • Primero dibujo los ejes de corrdenadas (local y global) o del mundo y del objeto opcion b
  • Después pongo establezco con la función gluLookAt(..) las coordenadas del punto de vista
  • Y desde ahí observo el objeto opción c
  case'b':
    //Respecto al eje del donde estaba el objeto
	 glClear(GL_COLOR_BUFFER_BIT);
	 dibujaCoordenadas();
	 dibujaCoordenadasObjeto();
	 glFlush();
	 break;
  case'c':
  //Esta opción que se ejecuta después de b
	 glClear(GL_COLOR_BUFFER_BIT);
	 glMatrixMode(GL_MODELVIEW);
	 glPopMatrix();
	 glPushMatrix();
	 gluLookAt(10,10,10,0,0,0,5,5,0);
     	 dibujaCoordenadas();
	 glutWireTeapot(3);
	 glFlush();
         break;