OpenGL girando una cámara alrededor de un punto
En OpenGL estoy tratando de rotar una cámara alrededor de un punto, con la cámara siendo la distancia r desde el punto y frente al punto cuando gira. En otras palabras, quiero que la cámara se mueva a lo largo de la circunferencia de un círculo en un radio r desde el centro, con la cámara mirando hacia el centro en cualquier punto a lo largo de la circunferencia.
Digamos que en el espacio 3d el centro del círculo es (3, 0, 3);
He intentado:
// move to center of circle
glTranslatef(-3, 0, -3)
// move a distance away from the circle
glTranslatef(0, 0, r);
// rotate along the y "up" axis
glRotatef(CameraAngle, 0, 1, 0);
Donde CameraAngle son los grados que se mueven alrededor circulo.
Mi resultado final es que la cámara sigue girando a lo largo del origen, no el centro del círculo. ¿Alguien puede ayudarme a solucionar este problema? ¡Gracias!
4 answers
Necesitas:
- gire la cámara alrededor del origen y luego tradúzcala (*)
O:
- use
gluLookAt
para mantener la cámara apuntando al centro del círculo
(*) las funciones de rotación normalmente giran alrededor del origen. Para rotar alrededor de otro punto P
tienes que:
- translate (- P)
- rotar
- translate (P)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-13 17:54:52
Es un poco confuso, pero creo que deberías:
// move camera a distance r away from the center
glTranslatef(0, 0, -r);
// rotate
glRotatef(angley, 0, 1, 0);
glRotatef(anglex, 1, 0, 0);
// move to center of circle
glTranslatef(-cx, -cy, -cz)
Tenga en cuenta que el orden NO debe cambiarse.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-03 07:18:55
¿Por qué molestarse con todos los problemas de girar la cámara y no girar la escena en sí?
Es mucho más sencillo. simplemente gire la matriz modelview alrededor del origen. Obtendrás exactamente el mismo resultado.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-13 18:49:38
Encuentro problemas como este mucho más fáciles de resolver con gluLookAt(). Usted define un camino para la cámara (un círculo es fácil!) y mantener el punto" central " fijo (es decir, la cosa que estás mirando).
El único truco posible es definir un buen vector ascendente but pero normalmente no demasiado trabajo. Si la ruta y el punto objetivo están en el mismo plano, puede utilizar el mismo vector ascendente cada vez!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-13 17:53:41