【问题标题】:Projection and Translation in OpenGL ES 2OpenGL ES 2 中的投影和平移
【发布时间】:2019-03-04 15:45:01
【问题描述】:

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

非常感谢!

【问题讨论】:

  • 您要移动矩形还是相机视图?

标签: android opengl-es-2.0


【解决方案1】:

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

例如:

如果屏幕为 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 space coords。

【讨论】:

  • 感谢您的回答。我想,我还是有点迷茫。不知何故,我需要知道屏幕空间中矩形的宽度才能正确地将其移动到边框。据我所知,我当前矩形的宽度和高度是在世界坐标中给出的,对吗?
  • 这就是我的 vertexArray 的样子:float[] verticesWithTriangles = { // Order of coordinates: X, Y, R, G, B // Triangle Fan 0f, 0f, 1f, 1f, 1f, -x_val, -y_val, 0.7f, 0.7f, 0.7f, x_val, -y_val, 0.7f, 0.7f, 0.7f, x_val, y_val, 0.7f, 0.7f, 0.7f, -x_val, y_val, 0.7f, 0.7f, 0.7f, -x_val, -y_val, 0.7f, 0.7f, 0.7f, }; ,而 x_val = 0.3f 和 y_val = 1f
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
  • 1970-01-01
相关资源
最近更新 更多