给定布尔函数渲染任意 CSG 实体?

Render arbitrary CSG solid given boolean function?

我正在为一个机器人项目实现我自己的 CSG 类,并且我正在考虑将每个实体实现为 return 一个布尔值的函数,给定一个 3D 点;如果 3D 点包含在实体中,则此函数将 return 为真。我想通过这样做,我可以轻松地执行实体的并集、交集和减法。

这足以执行碰撞检测等。本身,但我想实际渲染实体,所以我的问题是这样的;是否有任何方法可以根据上述布尔函数渲染实体?我非常乐意自己实现它,因为我想理想地知道到底发生了什么,这样我就可以根据需要简化和添加代码。我也愿意接受以不同方式表示实体的建议,如果它能让事情变得更容易的话!

需要注意的一件有趣的事情是,如果我能推导出诸如固体质心之类的东西,那将会很有用。

提前致谢! 李.

Constructive Solid Geometry 看起来很简单,但像大多数几何问题一样,有足够的微妙之处,除非它是您工作/研究的核心,否则您真的不想自己实现它。

我的建议是你应该寻找一个高质量的计算几何库(最好有良好的学术背景支持并作为开源发布)。 CGAL 是个不错的选择。

如果速度不是最重要的(即/您可以使用单独的工具离线解决问题),这个问题很常见,其他人已经做了很多艰苦的工作。查看 OpenSCAD "The Programmers Solid 3D CAD Modeller",它使用 CGAL 进行布尔运算。

如果您需要在非常低级和非常高级的接口之间进行折衷,SolidCode 可能是一个不错的中间体 api,它可以让您像从 Python 中调用命令一样调用 OpenSCAD代码。

对于渲染,我建议您酌情考虑将所有内容视为(三角化)表面网格或体积网格,并使用 CSG 或任何其他工具(例如/搅拌器)作为数据输入机制。您可能还会发现碰撞库很容易用于三角网格 - 虽然您可能会因使用 CSG 获得一些运行时性能改进,但开发整个项目可能需要更长的时间。

实现构造实体几何 (CSG) 的一般方法是通过实体的细分多边形上的二进制 Space 分区 (BSP) 树。 CSG 操作(并集、交集、减法)是通过对 BSP 树执行操作来完成的,结果是产生另一个 BSP 树。 BSP 结果包含作为操作结果的多边形。

由于您在 C# 中工作,请查看此库,它是开源的并且可以免费使用。

https://github.com/johnmott59/CGSinCSharp