2010-12-20 4 views
0

Je veux faire un jeu en 3D à la première personne, mais je ne peux pas régler correctement la formule de la caméra. Donc, j'ai une rotation: 0 à 359. Ensuite, les coordonnées x, y, z reste le même.Formule mathématique pour le jeu 3D à la première personne

rotation de la caméra: 0 - avant, 90 - gauche, 180 - dos, 270 - droit, mais je peux l'adapter

Quelle est la formule pour la caméra?

Plate-forme: Panda3D, python, opengl

Merci

+4

Si vous pouviez publier un exemple de code, et expliquer ce qu'il devrait faire, et ce qu'il * fait *, il pourrait être plus facile de répondre. – FrustratedWithFormsDesigner

+0

Vous n'avez pas non plus de rotation haut/bas de l'appareil photo? Habituellement, on calcule les rotations à partir de l'endroit où se trouve la caméra et où elle regarde. – ewanm89

+0

Oui, mais quelle est la formule pour cela? –

Répondre

3

OK, on ​​dirait que vous avez besoin d'un style Doom mouvement de la caméra, c.-à-d., pas de tours de haut en bas. Considérez ceci:

  1. Vous devez rendre le "monde" vu à travers la caméra.
  2. En supposant que x est positif à droite et y positif à votre front, lorsque la caméra se déplace vers la droite, l'image du monde se déplace vers la gauche.
  3. Lorsque l'appareil photo tourne positivement vers la gauche, l'image du monde tourne vers la droite.

Maintenant, nous allons essayer de construire les équations:

1.Premièrement, traduire le monde coordonne la position de la caméra:

Xwt = Xw - Xc; 
Ywt = Yw - Yc; 
Zwt = Zw; 

(Xc,Yc,Zc) = camera position 
(Xw,Yw,Zw) = world coordinates of object in the scene 
(Xwt,Ywt,Zwt) = world coordinates of object translated to camera position 

2.Now, faire pivoter les coordonnées traduites par un angle à l'opposé de la rotation de la caméra:

Xwc = Xwt * Cos(psi) + Ywt * Sin(psi); 
Ywc = -Xwt * Sin(psi) + Ywt * Cos(psi); 
Zwc = Zwt 

Psi = angle of camera rotation 
(Xwc,Ywc,Zwc) = world coordinates of object transformed to camera orientation 

Vous pouvez combiner les deux étapes et les transformer en une matrice.

Questions connexes