Pregunta

En mi aplicación de saturación estoy simulando un plano con la cámara. Cuando la velocidad de los aviones es baja, tengo la intención de que la punta comience a apuntar hacia el suelo cuando la cámara cae. Mi primer instinto fue cambiar el tono hasta que apuntara hacia abajo a -90 grados. Sin embargo, no puedo simplemente cambiar el tono porque si el avión está inclinado hacia un lado o al revés, notaría que está cambiando de dirección hacia el suelo.

Ahora estoy tratando de hacer una simulación aproximada de esto cambiando el 'lookAt.y' hacia abajo. Para hacer esto, estoy tratando de obtener todas las coordenadas actuales de la cámara que utilizo para configurar la cámara (eye.x, eye.y, eye.z, look.x, look.y, look.z, up.x, up.y, up.z). Luego recupera el conjunto con los nuevos valores modificados.

He estado trabajando con Camera.cpp y Camera.h para controlar las funciones de mi cámara. Se pueden encontrar en aquí

después de agregar métodos para obtener todos los valores, solo los valores de los ojos se actualizan cuando se realizan varios movimientos de cámara. Supongo que mi pregunta es cómo recuperar estos valores.

La llamada glLoadMaxtrix está en esta función

void Camera :: setModelViewMatrix(void)

{ // load model view matrix with existing camera values

    float m[16];

    Vector3 eVec(eye.x, eye.y, eye.z);

    m[0] =  u.x; m[4] =  u.y; m[8]  =  u.z;  m[12] = -eVec.dot(u);

    m[1] =  v.x; m[5] =  v.y; m[9]  =  v.z;  m[13] = -eVec.dot(v);

    m[2] =  n.x; m[6] =  n.y; m[10] =  n.z;  m[14] = -eVec.dot(n);

    m[3] =  0;   m[7] =  0;   m[11] =  0;    m[15] = 1.0;

look.x = u.y; look.y = v.y; look.z = n.y; 

    glMatrixMode(GL_MODELVIEW);

    glLoadMatrixf(m);

}

¿Hay alguna forma de obtener valores 'eye', 'lookAt' y 'up' de la matriz aquí? ¿O debería hacer algo más para obtener estos valores?

-Gracias por adelantado por su ayuda

¿Fue útil?

Solución

La clase de cámara a la que se vincula no es una clase real de OpenGL, pero debería ser lo suficientemente simple como para trabajar con ella.

La función citada solo toma los valores actuales del objeto de la cámara y los envía a OpenGL. Si observa la función de configuración de la cámara, puede ver cómo el programa calcula los valores que realmente almacena.

El valor del ojo se almacena directamente. El valor de lookAt es solo el valor de (eye - n), por vector math. El valor ascendente es el más difícil, pero si recuerdo correctamente mi matemática vectorial, creo que up = (n cross u).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top