线和3D模型交叉

时间:2016-03-17 15:19:58

标签: c++ opengl-es 3d

我正致力于平板电脑的应用程序,它可以显示不同的3D模型。我目前的任务是找出用户是否在触摸屏幕时击中模型。我有X,Y触摸坐标,我有两个解决方案:

1)我使用OpenGL ES 2.0进行模型渲染,所以也许我可以创建额外的帧缓冲区,并在片段着色器中以每个像素深度颜色渲染它。我的意思是如果深度是MAX,我可以设置黑色的像素颜色,如果是零,我可以设置白色。然后我可以使用来自此帧缓冲区的数据来获取我的点深度并找出我需要的内容。

2)第二种解决方案是从触摸点运行光线,然后使用常见的光线 - 三角形交叉算法查看所有模型三角形。

我的问题是:有更快的解决方案吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

我知道这是一个老问题,但是AFAIK在这种情况下的最佳实践是执行射线三角形相交测试。您可以通过蛮力测试每个三角形来实现。或者,您可以使用数据结构来加速事情。 octreek-d tree应该可以解决问题,尽管它们都有优点和缺点。