2011-11-04 133 views
2

我在iPhone上的OpenGL ES中設置了正交顯示屏,我想從當前設置更改我的座標系。OpenGL更改座標設置

我認爲這樣做會做到這一點。

glOrthof(0, self.view.frame.size.width, 0, self.view.frame.size.height, -1, 1); 
glViewport(0, 0, self.view.frame.size.width, self.view.frame.size.height); 

但是它似乎並沒有影響到屏幕座標系在所有。目前它的成立,所以如果我在頂點{0,-1,0,1,0,0適用對象, 0,1,0,-1,0,0} 我得到了整個屏幕尺寸的鑽石形狀(換句話說,我的下限爲-1,上限爲+1)

我將如何更改我的觀點,以便我的界限是0,0和screen_width,screen_height?

回答

1

好的,好吧,我得到了答案,這兩個功能確實做了我所需要的。

但是我在調​​用這些函數後加載了我的標識投影矩陣。因此,這些選項要麼是加載ID矩陣,要麼是在加載單位矩陣後調用這些函數。所以,如果我想我的座標從0屏幕大小去我會做到以下幾點:

- (void)drawFrame 
{ 
[(EAGLView *)self.view setFramebuffer]; 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 

glOrthof(0, self.view.frame.size.width, 0, self.view.frame.size.height, -1, 1); 
glViewport(0, 0, self.view.frame.size.width, self.view.frame.size.height); 

///DRAWING STUFF HERE 

[(EAGLView *)self.view presentFramebuffer]; 
} 

或從上面的代碼中

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 

glOrthof(0,self.view.frame.size.width, 0, self.view.frame.size.height,-1,1); 
glViewport(0, 0, self.view.frame.size.width, self.view.frame.size.height); 

刪除下面的代碼,然後將其添加到您的加載功能,也許在你INIT-或筆尖,或viewDidLoad中或viewWillAppear中

喚醒好像不是兩者都是必要的,但是它現在偉大的工作=]

+1

順便說。你對'glOrtho'乘上有效矩陣是正確的,因此通常需要'glMatrixMode(GL_PROJECTION); glLoadIdentity()'事先。但是'glViewport'與矩陣沒有任何關係,可以在任何時候調用(當然在實際繪圖之前)。 –