Diferencia entre revisiones de «ManuelRomero/grafica/escena1/ojo»
De WikiEducator
(→Uso de la función gluLookAt(...)) |
(→Uso de la función gluLookAt(...)) |
||
Línea 29: | Línea 29: | ||
Es perpendicular al vector hacia donde miramos | Es perpendicular al vector hacia donde miramos | ||
*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 | + | *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 36: | Línea 40: | ||
Imagen:coordenadasOjoTeteraZ.png | Imagen:coordenadasOjoTeteraZ.png | ||
<gallery> | <gallery> | ||
+ | |||
+ | *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> | ||
+ | *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> | ||
+ | *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> | ||
+ | ===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> | ||
+ | *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> |
Revisión de 01:54 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
(X,Y,Z,W)Tpunto_de_vista=(X,Y,Z,W)T * Mmundo* </div>
- 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;