1

我目前正在做一个小项目,我需要在mousemove上减去一个立方体的矩形区域(想想,一个用于在房子上放置门的缩进区域)。“门”将在点击时“放置”,但在用户决定其位置时需要“可视化”;实际上,除了用户不再移动它之外,没有任何变化。

这里的问题是找到一种允许用户移动门的有效方法,同时它可以交互和修改房屋网格。我一直在为Three.js 玩CSG,但我认为可能有更好的算法适合我的用例。我觉得从场景中移除立方体,将其转换为 CSG 网格,减去,然后转换回网格并在每一帧将其添加回场景中,直到用户确定其位置,成本真的很高。

CSG在这里是错误的方法吗?我应该直接修改顶点吗?如果是这样,我将如何计算/添加在正方形中创建“缩进”所需的顶点?真的,我正在寻找游戏和 3D 应用程序程序员认为处理此类案例的最佳实践。像 SketchUp 这样的应用程序如何处理诸如推/拉几何图形之类的事情?

谢谢。

4

1 回答 1

1

就我个人而言,我认为 CSG 最适合多边形汤类型的几何体,在这种几何体中,您对网格及其拓扑结构知之甚少。CSG 使用相当繁重的计算,应该适合您可能拥有的几乎所有任务,但它也可能会给您带来一些问题,例如缺乏对称性或一些精度问题。

另一方面,您的几何图形非常简单,并且您想动态创建它,因此创建两个简单的立方体并在它们上运行大量 CSG 没有多大意义。

如果我有类似的任务,我会手动创建这个几何图形,这非常简单:

首先,从一个简单的 2D 形状开始,而不是 3D 几何图形,想象您将墙分成 3 个部分 - 门的左侧、门的右侧、门的上方。您可能会注意到只有 3 个矩形,其位置和大小取决于墙壁和门的位置和大小。这只会给你 6 个三角形,它们基本上是你墙的前面。现在你添加了 6 个相似的三角形,距离很近(但记住要镜像它们的法线),你就有了墙的第二面。您还需要 8 个窄矩形来连接几何图形的两侧,然后就完成了。

我没有给你任何具体的方程式,因为它真的是基本的数学,比如 + 和 - 但如果你仍然有问题,我可能会进一步帮助你。我认为您可能对实际网格数据(例如顶点索引等)有更多问题,但这是一个很好的练习,可以了解网格内部结构。

顺便说一句:最好将墙分成 5 部分,而不是 3 部分,它会给你一个更好的网格,但我现在不想让它过于复杂。

顺便说一句 2:您还可以扩展此解决方案以在将来使用更多门/窗,但现在让我们坚持您的问题 :)。

于 2015-08-06T15:22:23.243 回答