[英]How to rotate the camera view around a point in OpenGL with gluLookAt
我正在嘗試使用 gluLookAt function 為相機的 position 和方向設置正確的視圖轉換。 在我的程序中,有一個以原點為中心的球體,當按下箭頭鍵時,相機會根據(左、右、上、下)球體移動。
我嘗試使用這種轉換: gluLookAt(xc, yc, zc, 0.0, 0.0, 0.0, 0.0, 1,0, 0,0);
為了驗證它的正確性,我打印了三個軸。 它似乎無法正常工作。 當我上下移動時,y 軸似乎沒有移動。
你能幫助理解這種轉變有什么問題嗎?
恆定up
向量是錯誤的!
當您的xc=0,yc=?,zc=0
(即當您在 y 軸上向上/向下移動時)時,您的向上向量與您的視圖方向(反)平行,這意味着gluLookAt
無法使用創建 3 個垂直基向量構建變換矩陣所需的叉積。
在這種情況下,向上向量應該不同......我通常使用點積
if (dot(a,b)/(|a|.|b|)>0.9)
檢測接近(反)平行向量並在您的情況下設置不同的向量,其簡化如下:
if (fabs(yc*yc)/(xc*xc+yc*yc+zc*zc)>(0.9*0.9)) use different up vector
您可以使用(+/-1,0,0)
或(0,0,+/-1)
哪個和哪個符號取決於您的坐標系約定(因此您的視圖不會扭曲/鏡像/旋轉通過這個奇異性)。
0.9
閾值意味着:
cos(da) = 0.9
da = acos(0.9)
da = 25.84 deg
這是兩個向量之間允許的最大 angular 差異......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.