2010-12-11 39 views
1

我最近学习了OpenGL,看起来非常直观,但我坚持。如何更改设置,以便OpenGL使用基于像素的坐标系而不是现在使用的坐标系。比如这段代码绘制一个约10×20像素的矩形:设置坐标系为OpenGL中的像素为可可

glBegin(GL_QUADS); { 
    glVertex3f(player.x, player.y, 0); 
    glVertex3f(player.x+0.05, player.y, 0); 
    glVertex3f(player.x+0.05, player.y+0.1, 0); 
    glVertex3f(player.x, player.y+0.1, 0); 
} 

我怎样才能让这个验证码:

glBegin(GL_QUADS); { 
    glVertex3f(player.x, player.y, 0); 
    glVertex3f(player.x+10.0, player.y, 0); 
    glVertex3f(player.x+10.0, player.y+20.0, 0); 
    glVertex3f(player.x, player.y+20.0, 0); 
} 

基本上会产生同样的事情?谢谢。

编辑:我看到有人建议在某处使用glOrtho(),但他们没有给出任何有关如何做到这一点的信息。这会起作用吗?如果是这样,我该怎么做?

回答

2

对不起,如果我听起来简短;事实证明,iPad上的Safari会丢弃你的输入,因为它可能会导致内存警告导致重新加载。

假设:你已经标记了iPhone的问题,所以你正在谈论可可触摸(原点在左上方,y轴为正)。同样,你可能需要点数,而不是像素 - 因此无论是否在视网膜屏幕上,它们都是320x480。

glOrtho正是你想要的 - 查看手册页http://www.khronos.org/opengles/documentation/opengles1_0/html/glOrtho.html。所以,你可能想要这样做到你的投影堆栈:

glOrthof(0,320,480,0,1,1000);

,然后在模型视图做一次:

的glTranslatef(0,0,-500)

,并提交所有未来的几何形状没有z分量。

这样做是建立一个没有视角的视口(即z位置不影响对象大小),屏幕的左边缘在x = 0,右边在x = 320,顶部在y = 0,y = 480的底部。它任意地将近夹平面放置在距离1处,远处放在1000处,因为它们必须位于某处。但是之后它会转换为二者之间的中间(好吧,不完全一样),所以如果您不再提交任何z坐标,那么您的所有几何图形都将可见,并且如果您在y或x周围有旋转的余地要他们。

虽然被警告:glVertex调用在iOS上不可用,因为它们不是OpenGL ES的一部分。它们在现代OpenGL中也被弃用。简短的版本是,他们真的效率低下,很难让司机很快处理。 glVertexPointer是要使用的东西,传递一个C数组。

+0

完美工作。谢谢! – Jumhyn 2010-12-11 04:38:19