2010-08-08 41 views

回答

0

这被称为“3D拾取”。您必须将屏幕坐标转换为世界坐标。从那里,做一个射线/碰撞物体(包围盒?)相交测试。如果它们相交,那就是用户点击的地方。

为了解决深度排序问题,您必须做更多的工作,比如找到每个对象的第一次交叉点,然后选择具有最低(正)时间的交点。

如果你谷歌的“3D采摘”,你可能会发现你在找什么。

这里是一个教程: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=32

注意,这不是针对边界对象的任何形状,无论是边框,多边形,曲线等,你一定要弄清楚数学用于您想要支持的每种类型对象的相交测试。

编辑:

之前,我挂它,我没看过该教程,我只是想出讷河是所有时尚的年轻人(当然十年前......)学习的OpenGL。

下面是OpenGL的常见问题解答一些关于采摘:

http://www.opengl.org/resources/faq/technical/selection.htm

+0

NeHe教程是一个不好的例子,它不能在OpenGL ES中远程工作。 – 2010-08-09 14:39:42

+0

@Matias Valdenegro:最终,3D拾取算法本身就是3D API不可知论者。我同意我链接的教程太多了,并且我没有仔细阅读它,看看他是否使用API​​来执行某些拾取计算。提供链接的目的是表明至少有一个3D拾取教程。 NEHE经常为新的OpenGL程序员提供简单的教程,无论它们在所有方面是否正确。如果你有更好的,请提供一个链接。 – 2010-08-09 18:55:20

0

waldecir,寻找一个raypick功能。它是通过点击的像素(实际上,通过相机平面上代表3D世界中“屏幕的玻璃表面”的像素的平移位置)从场景的相机中心发送光线的名称,并返回最前面的多边形ray与一些信息一起点击。通常在多边形的表面轴线内的坐标,例如, UV或纹理坐标。通过检查坐标,您可以确定用户点击了哪个平方。

光线可以从任何位置和任何方向发送,因此您可能需要获取相机位置和其平面中心,但文档应该能够帮助您。