OpenGL更改坐标设置

时间:2011-11-04 00:17:23

标签: ios opengl-es coordinates

我在iPhone上的OpenGL ES中设置了一个正交屏幕,我想从它当前的设置中更改我的坐标系。

我认为这样的事情会做到。

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,0,0,0,0,1处应用一个对象, 0,-1,0,0} 我得到一个整个屏幕大小的钻石形状(换句话说,我的下限为-1,上限为+1)

如何更改视图以使我的界限为0,0和screen_width,screen_height?

1 个答案:

答案 0 :(得分: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-或从nib唤醒,或者是viewDidLoad或viewWillAppear

似乎并非两者都是必要的,但它现在工作得很好=]