我正嘗試使用iPhone/iPod加速來直接操作3D對象。爲此,我一直在尋找很多東西(歐拉角,四元數等)。使用iPhone/iPod Touch加速旋轉3D對象
我使用OpenSG,在那裏我有一個3D環境,並希望操縱某個對象(只是在所有可能的iPhone/iPod的自由度的使用只有加速旋轉)。
所以,我想弄清楚這個問題的解決方案,但它仍然沒有預期的結果,並在某些角度得到一些奇怪的旋轉。
誰能告訴我什麼,我做錯了什麼?或者,有沒有更好的方法做到這一點,而不使用四元數?
加速度變量是一個Vec3f,其中包含來自iPhone/iPod的加速度計值,它使用低通濾波器進行濾波。
acceleration.normalize();
Vec3f reference = OSG::Vec3f(0, 0, 1);
OSG::Vec3f axis = acceleration.cross(reference);
angle = acos(acceleration.dot(reference));
OSG::Quaternion quat;
quat.setValueAsAxisRad(axis, angle);
此代碼後,我用四元數季更新我的場景節點。
我將參考向量更改爲(0,-1,0),但我認爲這不會產生變化,並且似乎正在做我所需要的。但是當角度爲180度時,物體在一個軸上進行一些旋轉並返回到相同的位置。我怎樣才能解決這個奇怪的旋轉? – PLinhol 2010-07-13 01:50:32
我覺得現在的問題是在180度的角度__acos__。如果我可以使用__atan2__,它可能會被修復。我一直在審查我的三角,並沒有找到辦法做到這一點... 有誰知道如何解決這個問題?或者,有沒有更好的方法來做到這一點? – PLinhol 2010-07-13 13:32:57
我似乎是某種萬向節鎖。但這不應該發生,對吧? 任何人都可以指出我解決這個問題的辦法嗎? – PLinhol 2010-07-13 22:04:04