簡體   English   中英

我如何正確使用gluLookAt?

[英]How do I use gluLookAt properly?

我不想進入復雜的三角函數來計算旋轉和我的3D世界那樣的東西所以gluLookAt似乎是一個不錯的選擇。 根據文檔,我需要做的就是為攝像機位置放置3個坐標,為我應該看到的位置設置3個坐標和“向上”位置。 直到我認為它必須與屏幕頂部方向上的視線成直角才是最后的意義。

它根本不起作用。 我有一些python代碼。 這是在我進入游戲的這一部分時初始化一些數據和一些模式代碼的代碼:

def init(self):
    self.game_over = False
    self.z = -30
    self.x = 0
def transfer(self):
    #Make OpenGL use 3D
    game.engage_3d(45,0.1,100)
    gluLookAt(0,0,-30,0,0,0,0,1,0)

“game.engage_3d(45,0.1,100)”基本上將投影矩陣設置為具有45度視角和近和遠坐標為0.1和100。

第一個gluLookAt很好地將相機放在正確的位置。

我有一個以(0,0,0)為中心繪制的立方體,沒有gluLookAt它工作正常。 在我繪制它之前,我有這個代碼:

gluLookAt(self.x,0,self.z,0,0,0,0,1,0)
if game.key(KEY_UP):
    self.z += 2.0/game.get_fps()
if game.key(KEY_DOWN):
    self.z -= 2.0/game.get_fps()
if game.key(KEY_LEFT):
    self.x += 2.0/game.get_fps()
if game.key(KEY_RIGHT):
    self.x -= 2.0/game.get_fps()

從那時起,向上位置應該始終與它始終是直角相同。 我認為它會做的是用向上和向下鍵向前和向后移動z軸,用左右鍵向左和向右穿過x軸。 實際發生的事情是,當我使用左右鍵時,立方體將圍繞由鍵加速的“眼睛”旋轉。 向上鍵導致另一個立方體從無處穿過屏幕並擊中第一個立方體。 向下鍵將神秘的克隆立方體帶回來。 這可以與輪換相結合,以提供完全不同的結果,因為文檔說會出現。

究竟是什么問題?

謝謝。

(gluLookAt中“up”向量背后的直覺很簡單:看看任何東西。現在將你的頭部傾斜90度。你沒有改變的地方,你所看到的方向沒有改變,但是你的形象是視網膜顯然有。有什么不同?頭頂指向的位置。這是向上的向量。)

但回答你的問題:gluLookAt調用不應該連接。 換句話說,如果您不確切知道它是如何工作的,可以使用gluLookAt的唯一模式如下:

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(...);
# do not touch the modelview matrix anymore!

從您的代碼中可以看出,您正在執行以下操作:

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(...);
# some stuff..
gluLookAt(...);

這會產生奇怪的結果,因為gluLookAt將當前矩陣乘以它計算的觀察矩陣。 如果你想連接變換,你最好搞清楚如何制作glTranslate,glScale和glRotatef適合你。 更好的是,您應該了解坐標轉換的工作原理並堅持使用glMultMatrix。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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