在二维矩形区域下选择三维元素(顶点、边、面)的算法



我正在尝试编写自己的CAD程序,通过在2D屏幕上绘制方框或多边形,然后在3D视图中突出显示下面的内容(忽略背面和不忽略背面(,让用户能够选择感兴趣的顶点/边/面(三角形(,这一点非常重要。

这通常是怎么做的?有什么开源的例子我可以看看吗?一般来说,这个过程是什么?

当你试图处理一百万个以上的三角形时,这尤其困难。

这里有很多方法可以做到这一点——两种最常用的方法:

  1. 射线拾取

    首先看:

    • 具有高多边形网格的OpenGL三维光线拾取

    其想法是将光线从相机焦点投射到鼠标(或光标(方向,并选择光线击中的对象。上面的链接利用OpenGL渲染,您可以非常轻松快速地(几乎免费(完成渲染,结果是像素完美的。为了使用选择框/多边形,您需要读取CPU侧的所有像素,并将它们转换为所选实体的列表。这稍微慢一点,但仍然可以非常快地完成(无论渲染场景的复杂性如何(。这种方法是O(1),但如果在CPU上执行相同的操作,则复杂度O(n)会慢得多,而n是实体总数(除非使用BVH或八叉树(但是,此方法将只选择可见的东西(因此后面没有背面或对象(。

  2. 几何测试

    Basicaly你的2D矩形将把透视的3D截锥体切成更小的一个,应该选择里面或相交的部分。你可以用CPU端的几何图形以测试的形式(长方体或盒子里的物体(来计算这个:

    • 圆锥体到长方体碰撞

    除非使用BVH或八叉树,否则复杂性也是O(n)此方法将选择所有对象(即使是不可见的对象(。

此外,我认为这对你来说可能是一本有趣的读物:

  • 简单拖动&插入C++

它展示了一个简单的C++应用程序架构,能够在2D中放置和移动对象。这是类似CAD的应用程序的一个基本起点。对于3D,您只需添加矩阵数学和/或编辑控件。。。

在CAD/CAM软件(IIRC AUTOCAD始于(中进行选择的另一个提示是,如果您的选择框是以从左到右、从上到下的方式创建的,则您可以选择完全在内部或相交的所有对象,如果选择框是按相反方向创建的,您只选择完全在里面的对象。这种方式允许更舒适的编辑。

相关内容

最新更新