首页 > 解决方案 > OpenGL ES 2 中的投影和平移

问题描述

我有一个关于 OpenGL ES 2 中的转换的问题。我目前正在使用三角形风扇绘制一个矩形,如下图所示。原点位于其中心,其宽度和高度分别为0.62。我假设这些尺寸与模型空间有关。但是,为了在平板电脑或手机上保持高度和宽度的比例,必须进行考虑设备长度比例的投影(同样是宽度和高度)。这就是我打电话orthoM(projectionMatrix, 0, -aspectRatio, aspectRatio, -1f, 1f, -1f, 1f);的原因,并且 aspectRatio 由float aspectRatio = (float) width / (float) height. 这最终导致了下图中显示的矩形。现在,我想将矩形沿 x 轴移动到屏幕的边框。但是,我无法提出正确的计算方法,要么我移动的太少要么太多。那么计算会是什么样子呢?此外,我对模型空间中给出的尺寸有点困惑。在那里可以达到的最大值和最小值是多少?

非常感谢!

在此处输入图像描述

标签: androidopengl-es-2.0

解决方案


矩形的顶点位置在世界空间中。一种方法是获取您想要移动到的屏幕坐标,然后将它们转换为世界空间。

例如:

如果屏幕是 300 x 200 并且您在世界空间的中心 0,0(或屏幕空间的 150、100)。你想翻译成300。

所以转换应该是 screen_position 到标准化的设备坐标,然后乘以 inverseOf(projection matrix * view matrix) 并除以 w 分量。

这里解释了鼠标它最终是一样的,只是你知道z,因为它已经是你用于矩形的那个(如果它在平面x,y上):OpenGL Math - Projecting Screen space to World空间坐标


推荐阅读