2013-01-17 18 views
0

在我的程序中,我在屏幕上有一個矩形圖,我使用gluLookAt更改了方向,它總是一直看着窗口的中心。
在應用程序中連續調用的draw函數中,我在程序中有一些狀態。清除數字的外觀

draw function 
{ 
    //if condition 1 
    gluLookAt(0,0,0); //look At the origin of the window. 
    //if condition 2 
    glTranslatef(20, 10, 10);//go to some point and STOP looking At 0,0,0 
    //if condition 3 
    glTranslatef(point); 
    glRotatef() 
    glTranslate(-point) 
} 

該代碼運行良好的第一個if condition和該圖保持適當尋找原點。當我在第二個if condition的申請中更改國旗時,我得到了譯文,但是我的形狀仍然繼續查看原文。
我該如何做到這一點?我希望形狀是直的,因爲任何普通的矩形都是在沒有lookAt的情況下繪製的。

這裏的圖不一定是矩形。它也可能是其他形狀

+1

所有這些矩陣運算與當前矩陣相乘取代目前的矩陣。他們不會爲您創建一個新的,乾淨的矩陣。嘗試在每個條件開始處放置glLoadIdentity()。 – Aeluned

+0

@Aeluned:我嘗試添加glLoadIdentity,但它會刪除我的翻譯效果,並在第二條件中調用調用。這是自然的還是我錯過了什麼?在第二個條件下,如果條件現在不發生,翻譯成最終點的形狀 – user1240679

+0

如果條件(條件2),我看不到輪轉調用。 glLoadIdentity完成所說的事情。它將單位矩陣加載到當前矩陣中。這是一個沒有定義轉換的矩陣。這裏的代碼太少,我不知道你想做什麼。 但是我可以告訴你,你的問題的解決方案將涉及glLoadIdentity和glPush/Pop矩陣的組合。我建議你看看這些,如果你不知道他們做什麼。 – Aeluned

回答

0

通過呼叫glLoadIdentity(即在呼叫glTranslatef之前的第二個if condition)初始化您的矩陣。 見http://www.opengl.org/sdk/docs/man2/xhtml/glLoadIdentity.xml

glLoadIdentity - 與單位矩陣

+0

我嘗試添加'glLoadIdentity',但它會切實刪除我的翻譯效果,並在第二個條件中旋轉調用。這是自然的還是我錯過了什麼?在第二種情況下,我的形狀翻譯成最終點不會發生。 – user1240679

+0

'glLoadIdentity'將當前矩陣設置爲標識 - 有效地從任何變換修改調用(glRotate,glTranslate,glLoadMatrix,gluLookAt,gluPerspective等)中刪除效果。 – kerim

+0

我的代碼中的第二個條件看起來像這樣:pastebin.com/VBum4sPZ。我在這裏的形狀類不斷地調用繪製函數。所以,在第二個條件中,當我調用glLoadIdentity()時,原點重置爲什麼位置?原點是否設置在某個位置,我是否可以對此進行翻譯? – user1240679