我在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?
答案 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
似乎并非两者都是必要的,但它现在工作得很好=]