2012-12-20 7 views
4

Dans Ogre3D Je veux mettre l'orientation, ce qui donne un vecteur « normal » à la vue de la caméra (comme une flèche pointant vers l'avant mes yeux) et un angle qui tourne la caméra (comme l'inclinaison de ma tête). Je peux le faire fonctionner avec cette astuce:orientation de la caméra Ogre vecteur et un angle

float angle = 10; /* tilt my head 10 degrees to right */ 
Vector3 vector(0, 0, 1); /* z axis pointing forward */ 
Vector3 target = camera->getPosition() + vector; 
camera->lookAt(target); 
camera->roll(Degree(angle)); 

Je ne suis pas sûr que cela fonctionnera pour chaque valeur et il semble hacky. Je cherche quelque chose de plus correct, comme l'utilisation de quaternions et Ogre::Camera::setOrientation().

Cet exemple ne fonctionne pas:

Quaternion orientation(Degree(angle), vector); 
camera->setOrientation(orientation); 

parce que la caméra est mis en rotation par angle le long vector.

Répondre

3

Vous pouvez facilement convertir le vecteur et l'angle à un Quaternion représentant la rotation pour vous. C'est le Quaternion à angle d'axe bien connu. Je ne sais pas quelle classe de Quaternion vous utilisez (Probablement il y en a une dans Ogre). Cependant, laissez-moi vous donner un exemple de code d'une classe Quaternion je l'ai écrit:

Quaternion Quaternion::CreateFromAxisAngle(Vector3 axis, float angle) { 
    float half = angle * 0.5f; 
    float s = sin(half); 

    Quaternion result; 
    result.x = axis.x * s; 
    result.y = axis.y * s; 
    result.z = axis.z * s; 
    result.w = cos(half); 
    return result; 
} 
+0

Notez que l'angle est en radians, puisque le péché() et cos() fonctions acceptent radians dans mon cas. Ajustez en fonction de vos besoins. – meyumer

+0

J'ai déjà essayé avec un quaternion d'angle et d'axe (Ogre :: Quaternion fournit un constructeur pour cela), le problème est [Ogre :: Camera :: setOrientation] (http://www.ogre3d.org/docs/api/ html/classOgre_1_1Camera.html # ab6b87536a32e04638eb73f70034e811d): il n'utilise pas le quaternion passé comme je le veux. –

+0

+1 J'ai cherché ça! – nurettin

Questions connexes