从 3D 模型的切割面获取平面上的 2D 位置

问题描述 投票:0回答:1

我用平面统一切割了一个 3D 模型,并在模型上有用于切割面的 3D 点,我想使用耳朵裁剪算法为网格创建一个新面。因此我需要一个逆时针顺序的 3D 点列表,这是一个困难的部分。

是否可以得到平面上的2D位置,然后使用逆时针排序算法和剪耳算法来解决2D中的问题?

这个项目将在 GPU 上运行多次,因此效率很重要,如果有更好的解决方案,我希望听到它们。

c# unity-game-engine 3d triangulation plane
1个回答
0
投票

是的,您可以将 3D 点从切割平面投影到 2D 空间,以使问题变得更简单。定义切割平面后,您可以将每个 3D 点变换到 2D 平面上(通过忽略其中一个坐标或将它们投影到平面的局部轴上)。有了 2D 点,您可以应用逆时针排序算法(例如礼品包装或格雷厄姆扫描),然后运行耳朵剪裁算法来生成新面孔。这种方式将更加高效,因为在 2D 中工作降低了复杂性,并且排序和剪耳操作都是可计算管理的。为了提高 GPU 效率,请尽量减少数据传输并确保并行性。

将 3D 点转换到 2D 平面的粗略代码:

Vector2 ProjectPointOnPlane(Vector3 point, Vector3 planeNormal, Vector3 planePoint)
{
    Vector3 v = point - planePoint;
    Vector3 projection = v - Vector3.Dot(v, planeNormal) * planeNormal;
    return new Vector2(projection.x, projection.z); // Example using XZ plane
}
© www.soinside.com 2019 - 2024. All rights reserved.