簡體   English   中英

如何使用 gluLookAt 圍繞 OpenGL 中的一個點旋轉相機視圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM