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

Infografia I, Práctica 5: Cámaras

Última actualización 23/09/2010

En esta práctica se trata todo el tema relacionado con las transformaciones geometricas, cómo posicionar objetos en nuestro entorno y cómo moverlos, rotarlos y escalarlos. Tambien se profundiza en el concepto de sistema de coordenadas.

Para ello se tendrá que hacer uso de las transformaciones mediante matrices. Es importante tener fresca toda la teoría de algebra asociada a matrices (multiplicacion de matrices, propiedades de las matrices, etc).

Esta práctica es clave para moverse con facilidad por entornos 3D.

Material

Requisitos

  • Implementar las siguientes funciones del framework:
    Class 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.
Valor: 10 puntos