2009-12-03 86 views
0

我在顯示功能下面的OpenGL代碼:爲什麼我的glutWireCube不在原點?

glLoadIdentity(); 
gluLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz); 
// called as: gluLookAt(20, 5, 5, -20, 5, 5, 0, 1, 0); 

axis(); 
glutWireCube (1.); 

glFlush(); 

axis()繪製線條從(0,0,0)至(10,0,0),(0,10,0)和(0 ,10,0),加上從(1,0,0)到(1,3,0)的一行。

我重塑功能包含以下內容:

glViewport (0, 0, (GLsizei) w, (GLsizei) h); 
glMatrixMode (GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective(45.0, (GLsizei) w/(GLsizei) h, 1.0, 100.0); 
glMatrixMode (GL_MODELVIEW); 

此圖片顯示了1.作爲參數運行程序glutWireCube結果:

glutWireCube(1.)

正如你所看到的,立方體不是以(0,0,0)爲中心,因爲文檔說它應該是:

立方體是在造型 中心座標原點(...)(source)

如果我5.運行該程序作爲參數,立方體甚至進一步移位:

glutWireCube(5.)

爲什麼會這樣,以及如何將立方體放在(0,0,0)左右?

更多信息請

如果切換的axis()glutWireCube順序沒關係。圍繞axis()glPushMatrix()glPopMatrix()也不修復它。

SOLUTION

我修改gluPerspective開始尋找遠離相機,現在的Z緩衝正常工作,所以很清楚的是,冰塊放置在原點附近。

回答

1

你確定座標軸不會與視圖矩陣混淆?

如果在繪製立方體後調用它,會發生什麼?

編輯補充:

其實......在照片仔細一看,看起來似乎中心在原點。

立方體的中心似乎與3個軸的交點完全對齊。唯一看起來可疑的是紅線不會寫在白色邊緣。你有Z緩衝適當設置?

+0

不幸的是,這也不會改變結果。 :( – jumoel 2009-12-03 11:20:28

+0

我認爲我有啓用了'glEnable(GL_DEPTH_TEST)'和'glDepthMask(GL_TRUE)'的Z緩衝,結果是相同的,如果行存在與否 – jumoel 2009-12-03 12:21:44

+0

其實,你是對的如果我查看圖像與'glOrtho'而不是'gluLookAt'和'gluPerspective'立方體以原點爲中心 我該如何正確啓用z緩衝? – jumoel 2009-12-03 12:29:38

0

這可能是對的,我認爲很難從視角來判斷......但我想這不是從更多的角度來看待它。

要快速排除axis()沒有修改模型視圖矩陣,與周圍基質推/彈出來電:

glPushMatrix(); 
axis(); 
glPopMatrix(); 

事情進行調查/檢查:

  1. 是這個整個窗口?這種觀點倒在一個角落似乎很奇怪。
  2. 如果您在渲染之前添加增加的旋轉,有幫助嗎?通過提供更多線索,這可以更容易地確定視角。
  3. 您也可以嘗試通過動態地將參數更改爲gluLookAt()來移動「相機」。
+0

不幸的是,這並沒有改變結果。 – jumoel 2009-12-03 11:19:40

+0

>這是整個窗口嗎?這種觀點倒在一個角落似乎很奇怪。 是的,它是整個窗口。我不得不以(20,5,5)的視角做前視。 – jumoel 2009-12-03 12:55:20

相關問題