Diferencia entre revisiones de «ManuelRomero/grafica/escena1/ojo»
De WikiEducator
(→Coordenadas del ojo:La matriz punto de vista) |
|||
(5 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>*''''' | ||
− | |||
*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(...)=== | ||
+ | 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 | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | |||
+ | *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 | ||
+ | <gallery caption="coordenaas del ojo en posicion 10,10,10> | ||
+ | Imagen:tetera2.png | ||
+ | Imagen:coordenadasOjoTetera1.png | ||
+ | Imagen:coordenadasOjoTeteraY.png | ||
+ | Imagen:coordenadasOjoTeteraZ.png | ||
+ | </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