【问题标题】:OpenGL ES 2.0 Vertex position for Overlay用于叠加的 OpenGL ES 2.0 顶点位置
【发布时间】:2013-10-09 22:02:36
【问题描述】:

目前我正在使用 OpenGL ES 2.0 绘制一个带有引脚的对象,并将其显示在 CAEAGLLayer 上。我能够通过颜色选择来识别物体。 现在我需要计算 pin 的世界坐标的屏幕坐标,以便在正确的位置绘制例如标签(我想使用可可触摸组件)。计算屏幕坐标的正确方法是什么(应该忽略隐藏的对象)? 遍历整个图像并使用每个像素对其进行颜色选择听起来不是正确的方法。

提前致谢。

【问题讨论】:

    标签: ios opengl-es-2.0


    【解决方案1】:

    Apple 提供了自己的 GL 数学函数: 见GLKMathUtils documentation

    正如 Lukas 指出的,您可以使用它来投影(世界 -> 屏幕坐标)或取消投影(屏幕 -> 世界坐标)

    所以,如果你已经在使用 GLKit 进行矩阵转换,你可以使用这个:

    GLKVector3 screenPoint = GLKMathProject(modelPoint, modelViewMatrix, projectionMatrix, viewport);
    

    【讨论】:

    • 感谢您的提示。但我试图尽可能独立于平台,因为代码可能需要移植到非苹果平台
    【解决方案2】:

    我可以自己回答这个问题。在某些版本的 OpenGL 上 glProject() 可用,可用于计算屏幕上顶点的位置。不幸的是,这个函数在 OpenGL ES 2.0 中不可用,所以你必须自己进行计算,或者你使用像 OpenGL Mathematics 这样的数学库,它提供了一个函数 glProject():

    #include "matrix_transform.hpp"
    #include "transform.hpp"
    
    vec3 pinScreenPosition = glm::project(vec3(0,0,0), modelMatrix, projectionMatrix, vec4(0, 0, screenDimensions.x * screenScale, screenDimensions.y * screenScale));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 2017-01-28
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多