2012-12-20 71 views
4

在Ogre3d中,我想設置方向,爲相機視圖(如箭頭指向我的眼睛)和旋轉相機的角度(如傾斜我的頭部)給出一個「正常」的矢量。 我能得到它與這一招工作:Ogre相機的方向給定矢量和角度

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)); 

我不知道這會爲每一個值的工作,似乎哈克。我正在尋找更正確的東西,比如使用四元數和Ogre::Camera::setOrientation()

這個例子不起作用:

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

,因爲相機是由angle沿vector旋轉。

回答

3

您可以輕鬆地將矢量和角度轉換爲代表旋轉的四元數。這是衆所周知的軸角四元數。我不知道你正在使用哪個四元數類(可能在Ogre中有一個)。然而,讓我給你從四元數類我寫的示例代碼:

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

注意,角弧度,自罪()和cos()函數接受我的情況弧度。調整以適應您的需求。 – meyumer

+0

我已經嘗試了從角度和軸的四元數(Ogre :: Quaternion爲此提供了一個構造函數),問題是[Ogre :: Camera :: setOrientation](http://www.ogre3d.org/docs/api/ html/classOgre_1_1Camera.html#ab6b87536a32e04638eb73f70034e811d):它不會像我想要的那樣使用傳遞的四元數。 –

+0

+1我一直在尋找這個! – nurettin