如何在OpenGL ES 1.1中选择单个三角形?

时间:2010-12-15 00:01:01

标签: objective-c ipad opengl-es objective-c++

我想要做的是在屏幕上选择一个点,将光线直接沿z轴投射穿过该点,然后返回我的光线相交的第一个三角形的x y z坐标和顶点法线。问题是,我不熟悉OpenGL来解决这个问题。我已经在后台缓冲区上使用不同的颜色选择了Windows OpenGL,但没有涉及单个三角形。

3 个答案:

答案 0 :(得分:2)

我在iPhone上做过这个,但如上所述,我不得不自己选择。不可避免地,它具有我特定应用程序独有的风味,但从高层次来看,它就是这样的。

  1. 您需要一个功能来将屏幕坐标取消投影到世界坐标。在桌面上,有gluUnProject(),但在iPhone上没有这样的实用程序。就个人而言,我使用的是与Mesa here相同功能的iPhone端口。您可能需要调整它。

  2. 您可以使用上述函数在世界空间中获取两个点,这两个点表示像素后面的无限线与近剪裁平面和远剪裁平面相交的位置。使用此向量,您将必须迭代场景中的三角形,考虑任何局部变换,并使用光线平面交叉算法测试碰撞,这可能是一个问题本身。

    < / LI>
  3. 有很多方法可以将光线与三角形相交。我建议去维基百科旅行。我会说我使用如下内容:首先,简单地将光线与包含三角形的平面相交。然后,测试以确定交叉点是否实际位于所讨论的三角形内。如果是的话,你就完成了。如果没有,继续前进。

答案 1 :(得分:0)

OpenGL ES 1.1没有专门的拣选功能。你必须建立自己的系统才能做到这一点。

答案 2 :(得分:0)

只要想到我的头脑,你就需要通过任何方法开始获得你想要用于拾取的点。如果此点位于不同的坐标系中,则需要对其进行转换,以确保了解场景中当前的任何变换。在此之后,您可以沿z轴投射一个数组,并使用任何三角形到光线交叉算法来获得它经过的第一个三角形。您可以使用场景图或类似的东西跟踪您的场景。希望这会有所帮助。