2012-03-30 109 views
0

我不明白我们如何使用opengl定位对象。所有转换值在“-1.0f” - “1.0f”之间。我使用surfaceview制作了一些游戏。我可以简单地改变和定义对象的x和y位置。例;如果android屏幕宽度是480px,那么我的box max x值是480.但是我怎么能在opengl上做到这一点?如何制定限制以及如何使用像素或dpi分辨率?我怎样才能改变我的手指触摸位置的盒子位置?Android OpenGL es转换像素

回答

0

首先,glTranslate和大多数(如果不是全部)转换值不限于“-1.0”到“1.0”之间的值。能够将对象10px向左或向右移动将需要正确设置您的转换矩阵。下面是OpenGL如何操纵你给它的顶点的顺序。

[(4×4)投影] [(4×4)查看] [(4×4)产品型号] * [(4X1)的顶点]

你可能会想使用glOrtho(0.0,宽0.0,高度,-1.0,1.0)设置您的投影矩阵。您可以将View矩阵作为单位矩阵。最后,您可以使用模型矩阵以像素为单位平移,旋转和缩放对象。现在,Model矩阵上的glTranslatef(10.0,0.0,0.0)应该在x方向上移动对象10px。或者,您可以将模型矩阵作为单位矩阵,并让您的顶点表示像素坐标。

你可以看看这个简报,在幻灯片4上,你可以看到一个很好的图形,详细描述了你的顶点发生了什么。 https://wiki.engr.illinois.edu/download/attachments/195761441/OpenGL.pptx?version=1&modificationDate=1326820017000

+0

'glOrtho(double,int,double,int,double,double)方法未定义为GL10类型更改'glOrthof'或'glOrthox'? – musa 2012-04-01 16:31:50

+0

你必须使用glOrthof或glOrthox。我只用glOrtho作为推广我的答案的一种方式。 – MyReliableSchreck 2012-04-02 03:08:36

0

要更改OpenGL中项目的位置,您使用的是glTranslate,并且您可以在绘制时设置所用矩形的大小,但据我所知,无法限制一个项目的大小对象,但是你可以在绘制矩形/框之前进行一些检查,以确定用户想要调整大小的大小是否大于Android设备屏幕,如果是,则不做任何事情(或者可以显示吐司告诉用户它无法获得更大)

而且这可能会帮助你,但relation between pixels and gl.gltranslatef(floatx,y,z)?允许我引用了一点吧:

由于例如,当您执行glTranslate时,特定对象将移动的距离(以像素为单位)将取决于观看者距离 的距离。距离观看者越远,特定横向或上/下转换的像素越少。

+0

yes,glTranslate更改位置,但此方法值介于“1.0”和“-1.0”之间。我怎样才能移动到10px的权利?或移动到我的触摸位置的对象? – musa 2012-03-30 22:25:23