Infografia I: Práctica 5: Cámaras - Javi Agenjo at UPF

Infografia I: Práctica 5: Cámaras

Última actualización 3/05/2010

En esta práctica aprenderemos sobre el uso de camaras en entornos 3D, cómo construir las transformaciones, como proyectar de 3D a 2D, los diferentes tipos de proyección que existen y cómo combinarlos para crear la matriz MVP.

Material

Anotaciones

  • La Z negativa es hacia adelante del sistema.
  • Si al construir alguna matriz no sale correctamente, probad con la transpuesta (hay un metodo transpose).

Requisitos

  • Implementar las siguientes funciones del framework:
    • Clase Camera:
      • void updateViewMatrix(void);
      • void updateProjectionMatrix(void);
  • La escena tiene que tener varios objetos en diferentes posiciones comportandose de manera independiente.
  • La posición de la camara (eye) se tiene que poder controlar con el teclado (sin afectar al center).
  • La posicion donde apunta la camara (center) se tiene que poder controlar con el teclado (sin afectar al eye).
  • Sugerencias opcionales:
    • Se valorará la interacción con la cámara, la comodidad para moverse por el entorno, poder cambiar de cámara, etc.
    • Interaccion más compleja: Poder mover la cámara relativa a donde está apuntando para navegar por la escena.
    • Pintar la escena desde dos puntos de vista distintos a la vez, usando glViewport (esta instrucción nos permite definir la región de la pantalla donde vamos a dibujar).

Fallos comunes

  • Tener la viewmatrix mal y no darse cuenta. Fijaos si el resultado de mover el eye o el center concuerda con lo que intuitivamente debería pasar. Si se mueve solo el eye entonces lo que haya en el centro debe seguir en el centro, si se mueve el center entonces la posición de la camara tiene que ser exactamente la misma. Podeis comparar vuestros resultados con los que genera el codigo de OpenGL, si hay mucha diferencia entonces hay algun fallo. Mirad de no estar usando la transpuesta en algun paso.
  • Al mover la camara se percibe como si rotase sobre el eje Z (roll), no deberia pasar si el up es (0,1,0). No confundir el vector Top por el Up.
  • Llenar el codigo de variables model. Si teneis más de una model podeis hacer un array de models en lugar de usar variables sueltas.
  • Utilizar las funciones de OpenGL que crean las matrices automaticamente (glLookAt o glPerspective)
  • Multiplicar los vectores en lugar de hacer producto vectorial. Teneis un método en la clase Vector3 para realizar el producto vectorial.