0

我有数千行的 3d 场景。我希望能够在鼠标光标的 10 像素邻域中选择所有 3d 线(使用透视投影)。我尝试使用基于独特颜色的方法。但是这种方法不适合我,因为我不能选择所有行 - 只能选择最接近的行。我的问题有什么可以接受的解决方案吗?OpenGL 或 DirectX - 没关系。

4

3 回答 3

2

为什么不只计算这些线和相关点之间的距离?这是一个 2D 线到点的距离计算。你可能可以用一个 Perl 脚本来实现它,该脚本调用一个调用 Lua 解释器的 Python 可执行文件,并且仍然在一秒钟内完成 100,000 个。

这是“当我只有一把锤子时,每个问题看起来都像钉子”的问题之一。您不必使用渲染来进行挑选。

于 2012-07-15T20:33:56.243 回答
2

在旧的 OpenGL (<= 2.1) 中,您可以使用选择模式来做到这一点。用于gluPickMatrix()选择光标位置周围的一个小区域,初始化选择缓冲区,进入选择模式 ( glRenderMode(GL_SELECT)),然后重绘场景。然后退出选择模式,您的选择缓冲区将是出现在您感兴趣的区域中的所有绘制对象的全名(实际上是 id 编号)。您必须稍微修改您的绘图代码,以便glPushName(objIndex)在您渲染的每个对象周围推送/弹出名称 ( )。

这不是现代图形硬件的最有效使用,但它总是有效的。

于 2012-07-15T22:14:35.407 回答
1

Neither OpenGL nor DirectX will do the job for you, because they only draw things. What you must do is projecting all the lines in your scene to the screen and test, if the closest point to the selected position is nearer than your desired max distance. You can accelerate this by keeping the lines in some spatial subdivision structure (like a Kd tree or similar) to discard quickly all those lines which definitely don't match your criteria.

于 2012-07-15T23:08:09.027 回答