我对OpenGL ES 2中的转换有疑问。我目前正在使用三角形风扇绘制一个矩形,如下图所示。原点位于其中心,而其宽度和高度分别为0.6
和2
。我认为这些大小与模型空间有关。但是,为了保持平板电脑或手机上的高度与宽度之比,必须做出考虑设备长度比例(再次为宽度和高度)的投影。这就是为什么我调用orthoM(projectionMatrix, 0, -aspectRatio, aspectRatio, -1f, 1f, -1f, 1f);
,而AspectRatio由float aspectRatio = (float) width / (float) height
给出的原因。最终导致下图所示的矩形。现在,我想将矩形沿x轴移动到屏幕的边界。但是,我无法提出正确的计算方法,或者我将其移动得太少或太多。那么计算结果如何?此外,我对模型空间中给出的尺寸有些困惑。在那里可以达到的最大值和最小值是什么?
非常感谢!
答案 0 :(得分:0)
矩形的顶点位置在世界空间中。一种方法是获取要移动到的屏幕坐标,然后将其转换为世界空间。
例如:
如果屏幕为300 x 200,并且您位于世界空间的0,0中心(或屏幕空间为150,100)。您想要翻译成300。
因此,转换应在screen_position到归一化的设备坐标,然后乘以inverseOf(投影矩阵*视图矩阵),然后除以w分量。
在这里为鼠标说明它最终是相同的,只是您知道z,因为它已经是您用于矩形的z(如果它在平面x,y上):OpenGL Math - Projecting Screen space to World space coords