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'与矩阵没有任何关系,可以在任何时候调用(当然在实际绘图之前)。 –