2010-10-17 55 views
1

對於我的圖形類,我們的教授希望我們自己跟蹤當前的矩陣,並將旋轉/平移/縮放矩陣應用到它,然後使用glMatrixMode(GL_MODELVIEW)和glLoadMatrix(current_matrix)加載它。所有這一切似乎都很好,但是當我真正使用它時,我仍然有一個問題:OpenGL MODELVIEW手動旋轉

如果我將旋轉應用到某個東西,它會正確旋轉,但是如果我嘗試圍繞y軸旋轉世界視圖,每個物體只會圍繞它們的y軸旋轉。

如果這是原始圖像:http://www.glowfoto.com/static_image/17-104501L/1324/jpg/10/2010/img5/glowfoto

這就是我得到:Link在評論

這就是我想:Link在評論

我做的是,使我current_matrix的副本。將旋轉應用於current_matrix(將其相乘)。然後調用glMatrixMode(GL_MODELVIEW)和glLoadMatrix(transformed_matrix)。畫一些東西。然後將舊矩陣複製回current_matrix。然後調用glMatrixMode(GL_MODELVIEW)和glLoadMatrix(current_matrix)。任何幫助將是美好的!

P.S.分配的目的是不使用glRotate glScale和其他命令。

+0

這就是我得到:http://www.glowfoto.com/static_image/17-130108L/2315/jpg/10/2010/img4/glowfoto 這就是我想:HTTP:// www.glowfoto.com/static_image/17-111001L/6790/jpg/10/2010/img6/glowfoto – hassaanm 2010-10-17 18:20:38

回答

1

我所做的是,(1)製作我的 current_matrix的副本。 (2)應用一個旋轉到 current_matrix(乘以它)。然後調用glMatrixMode(GL_MODELVIEW)和 (4)glLoadMatrix(transformed_matrix)。 ...

(由我添加的數字)。

聽起來像第4步,您將覆蓋第2步的結果。第2步之後,您是否將結果保存在某處(例如,到transformed_matrix?

(5)畫一些東西。然後(6)將舊的 矩陣複製回current_matrix。 (7)調用glMatrixMode(GL_MODELVIEW) 和(8)glLoadMatrix(current_matrix)。

發生得出任何矩陣的修改將會對屏幕上顯示的內容沒有影響(除非它們影響下面穿過引出環)。

而且目前還不清楚什麼是「老矩陣」你指的是在第6步

附:下面是瞭解OpenGL中MODELVIEW和PROJECTION矩陣的好資源:OpenGL Transformation。例如。:

注意再次,OpenGL的執行反 爲了 多個轉換,因此,觀看變換 至上造型在你的代碼轉換 之前。並且,如果您想要 旋轉,然後翻譯一個對象,請將 glTranslatef()先glRotatef()。

1

那麼你最大的問題是,你顯然是旋轉最右邊的對象然後翻譯它。你想要做的是翻譯它然後旋轉它(關於原點)。要做到這一點,你需要應用翻譯和按相反的順序旋轉......矩陣數學是不可交換的。

+0

實際上我認爲問題在於我一直使用GL_MODELVIEW而不是GL_PROJECTION – hassaanm 2010-10-18 16:16:20

+0

那麼你可以修改投影矩陣,但是,這個答案突出了我,你並不真正瞭解轉換管道如何工作.... – Goz 2010-10-18 16:32:57

+0

他不應該觸摸投影矩陣的手頭任務!將其設置爲正交或投影變換。 – Coder 2010-10-18 17:26:32

0

驗證矩陣構造是否正確(將其打印到文件或類似內容),然後記住取決於您是使用post還是前乘,結果是完全不同的。如果你仍然有問題,向我們展示一些代碼。