2009-06-14 95 views
1

我想在OpenGL的各個軸上獲取相機旋轉(但是特別使用Java,LWJGL和jME)。相機對象允許我將方向設置爲Vector3f,但這似乎無法獲得分組旋轉;每個軸都與另一個軸相連。我發現toAngleAxis與偏移角度組件是一個快速的黑客攻擊,但在大多數情況下無法正常工作。不幸的是,我不擅長數學,否則我可能已經能夠解決這個問題了:)再次,我只需要X,Y和Z軸成分化並以弧度爲單位,從0弧度到2弧度弧度。在OpenGL中獲取X,Y和Z軸上弧度的相機旋轉?

任何人都可以幫忙嗎?

歡呼和預先感謝, 克里斯

回答

1

獲取旋轉天使只需要轉化直角座標系中給定成球形座標中視圖載體。你可以在wikipedia找到公式。

viewvector = <x, y, z> 

r = sqrt(x² + y² + z²) 
phi = arctan2(y, x) 
theta = arccos(z/r) 

請注意,您只能從視圖向量獲取兩個旋轉天使。獲得第三旋轉角度需要知道投影平面x或y軸。

+0

這是否需要視圖參考點和視圖平面正常? – 2009-06-14 18:20:15

+0

我在http://www.fsz.bme.hu/~coll/papers/applets/doc/images/world3D.cameras.Camera3D.Image01.gif上找到了一張有用的圖片,投影平面X或Y軸與此有關?是否使用Vector3f作爲y-up或z-up座標系統? 乾杯 – 2009-06-14 18:34:11

3

我推薦閱讀關於歐拉角度,偏航/俯仰/俯仰和四元數的方向。這些主題將有助於你理解所涉及的一切。如果我理解正確,你試圖從指定的方向構造歐拉角。

看到這個code for some algorithms與歐拉角工作。特別是,我相信你想要的是setDirection方法。

這會給你一個方向矢量的偏航和俯仰。注意,你只需要2次旋轉,因爲「roll」將需要關於方向矢量的旋轉(或者你的方向被指定爲單個四元數旋轉)。