3d - Ogre/Mogre: perspectiva de la cámara de dos puntos
perspectivecamera (1)
Estoy mostrando una escena con algunos cubos en ella. La cámara usa perseverancia. Todo funciona muy bien, pero me gustaría que las líneas verticales sean paralelas (perspectiva de dos puntos: http://en.wikipedia.org/wiki/Perspective_(graphical)#Two-point_perspective ).
Al ver un cubo desde el frente:
Lo que quiero:
+-----+
| |
| |
+-----+
Lo que obtengo (exagerado):
+--------+
/ /
/ /
+--+
He intentado juguetear con el campo de visión de la cámara, pero fue en vano.
Mi intento hasta ahora:
Camera = SceneManager.CreateCamera(CameraName);
float q = 45;
float d = 5000f;
Matrix4 m = new Matrix4(
1, 0, 0, (float)(Math.Sin(q)/d),
0, 1, 0, 0,
0, 0, 1, (float)(Math.Cos(q)/d),
0, 0, 0, 0
);
Camera.SetCustomProjectionMatrix(true, m);
La Universidad de Berkeley tiene una página sobre las diferentes transformaciones de perspectiva y las matrices que necesita usar. La transformación de perspectiva de dos puntos es:
_ _
| 1 0 0 sin(q)/d |
| 0 1 0 0 |
| 0 0 1 cos(q)/d |
|_ 0 0 0 0 _|
Donde q
es el ángulo utilizado para rotar los puntos (en lugar de los ejes) d
está explicado (!) Pero creo que es la distancia de la cámara desde el plano focal.