我正在为一个机器人项目实现我自己的CSG类,我正在考虑将每个实体实现为一个函数,返回一个给定三维点的布尔值;如果三维点包含在这个实体中,这个函数将返回true。我认为,通过这样做,我可以很容易地进行合并,相交和减法固体。
这将足以执行碰撞检测.etc。它本身,但我想要实际呈现的固体,所以我的问题是,有什么方法来呈现一个固体,鉴于其布尔函数,如上文所述?我非常乐意自己实现这一点,因为我希望能够准确地知道发生了什么,这样我就可以根据需要简化和添加代码。我也是开放的建议,代表固体以不同的方式,如果这将使事情变得更容易!
值得注意的是,如果我能推导出固体的质心之类的东西,那是很有用的。
提前感谢!李。
发布于 2015-05-31 14:32:41
构造性的立体几何看起来很简单,但就像大多数几何问题一样,有足够的细微之处,除非它是你工作/研究的核心,否则你真的不想为自己实现这一点。
我的建议是,您应该寻找一个高质量的计算几何库(理想的支持是良好的学术背景,并以开放源码的形式发布)。CGAL是一个很好的选择。
如果速度不是一个非常重要的问题(即/你可以在一个单独的工具中离线解决问题),那么这个问题是足够普遍的,以至于其他人已经做了很多艰苦的工作。查看OpenSCAD“程序员Solid 3D CAD Modeller",它使用CGAL来执行布尔操作。
如果您需要在非常低的和非常高级别的接口之间进行折衷,SolidCode可能不是一个糟糕的中间api,它允许您调用OpenSCAD代码中的命令。
对于渲染,我建议您考虑把所有的东西当作一个(三角形的)表面网格或体积网格,并使用CSG或任何其他工具(例如/搅拌器)作为数据输入的机制。您可能还会发现,冲突库很容易用于三角网格--虽然使用CSG可以获得一些运行时性能改进,但开发整个项目可能需要更长的时间。
发布于 2016-09-13 20:07:04
实现构造性立体几何(CSG)的一般方法是在固体多边形上建立二元空间划分(BSP)树。CSG操作(并、交、减)是通过对BSP树执行操作来完成的,因此产生了另一个BSP树。BSP结果包含操作的结果的多边形。
因为您是在C#工作,所以请查看这个库,它是开源的,可以免费使用。
https://stackoverflow.com/questions/30499463
复制相似问题