我有几千条线的3d场景。我希望能够拾取鼠标光标附近10像素范围内的所有3D线(使用透视投影)。我尝试过使用基于唯一颜色的方法。但是这种方法不适合我,因为我不能选择所有的行-只选择最接近的一行。我的问题有什么可以接受的解决方案吗?OpenGL或DirectX -无关紧要。
发布于 2012-07-16 04:33:56
为什么不直接计算这些线和相关点之间的距离呢?这是一种二维线到点距离计算。您可以使用Perl脚本来实现它,该脚本调用Python可执行文件,而Python可执行文件调用Lua interpeter,并且仍然在一秒钟内执行100,000个插入器。
这是那种“当我只有一把锤子,每个问题看起来都像钉子”这种狭隘的观点之一。您不必使用渲染来进行拾取。
发布于 2012-07-16 06:14:35
在旧的OpenGL (<= 2.1)中,您可以使用选择模式来执行此操作。使用gluPickMatrix()选择光标位置周围的小区域,初始化选择缓冲区,滑入选择模式(glRenderMode(GL_SELECT)),然后重绘场景。然后从选择模式返回,您的选择缓冲区将是出现在您感兴趣区域中的所有绘制对象的全名(真实id号)。你必须稍微修改你的绘图代码,在你渲染的每个对象周围推入/弹出名字(glPushName(objIndex))。
这不是现代图形硬件的最有效的使用,但它总是有效的。
发布于 2012-07-16 07:08:09
OpenGL和DirectX都不会为您完成这项工作,因为它们只绘制东西。如果离选定位置最近的点比所需的最大距离近,则必须做的是将场景中的所有线投影到屏幕并进行测试。您可以通过在某些空间细分结构(如Kd树或类似结构)中保留线条来加速此过程,以便快速丢弃所有肯定不符合您的标准的线条。
https://stackoverflow.com/questions/11495121
复制相似问题