简单的网格切割算法,可用于具有0个种数的简单3D多重体
一个概念验证的 Unity 项目,用于网格切割算法。 这是一个简单的算法实现,它将具有零种数的 3d 多面体对象分割为 2 部分。 分割是通过用户绘制的直线和与相机前方方向相同的深度定义的平面来完成的 (即, 当我们绘制一条直线时, 我们无法看到生成的平面, 因为它与摄像机和直线完全对齐)
对于每个被标记为 sliceable 的对象:
我们创建 2 个新网格:一个 正网格,位于切片平面的正面,另一个 负网格,位于另一侧。
我们遍历网格的每个三角形,如果它与平面相交,则将其分割为 3 个三角形: 2 个位于切割的较大侧,1 个位于另一侧(我们假设它无法完美切割为 2 个三角形)。 如果三角形不与平面相交,则我们只需将其存储在相应的网格(正值或负值)中。我们还保留了一份新创建的顶点列表,这些顶点都位于网格的边界上。
然后我们创建新的三角形来形成边界面(切割后生成的新面)。目前有两种不同的方法来生成边界面(生成中心顶点,或通过迭代排序的顶点对来创建三角形扇),但这两种方法大多只适用于凸多边形。
注意: * 球体使用的材质是来自 Unity 标准资源的 GlassRefractive * 蘇珊猴使用的材质是来自 Unity 标准资源的 ToonLit * 这些材质在项目的场景中使用,但不包含在本仓库中。如果您想与它们进行实验,请从标准资源导入以下文件夹: * Effects/GlassRefraction * Effects/ToonShading * Prototyping/Materials * Prototyping/Textures
暂无开放 Issues,或尚未同步最近议题。