我正在开发一个小项目,我需要在 mousemove 上减去多维数据集的矩形区域(想想,在房子上放置一个门的缩进区域)。 “门”将在点击时“放置”,但在用户决定其位置时需要“可视化”;实际上,除了用户不再移动它之外,没有任何改变。
这里的问题是找到一种允许用户移动门的有效方式,同时它可以交互并修改房屋网格。我一直在为CSG使用Three.js,但我认为我的用例可能有更好的算法。我觉得从场景中移除立方体,将其转换为CSG网格,减去,然后转换回网格并将其添加回每个帧的场景 将是非常昂贵的,直到用户决定它的位置。
CSG在这方面是错误的做法吗?我应该直接修改顶点吗?如果是这样,我将如何计算/添加在方块中创建“缩进”所需的顶点?真的,我正在寻找哪些游戏和3D应用程序员考虑处理这样的案例的最佳实践。像SketchUp这样的应用程序如何处理推/拉几何等事情?
感谢。
答案 0 :(得分:1)
我个人认为CSG最适合多边形汤类几何,你对网格及其拓扑结构知之甚少。 CSG使用相当繁重的计算并且几乎适合您可能拥有的所有任务,但它也可能会给您带来一些问题,例如缺乏对称性或某些精确度问题。
另一方面,你的几何结构非常简单,你想要在运行中创建它,所以创建两个简单的立方体并在这些立方体上运行大量CSG没有多大意义。
如果我有类似的任务,我只需手动创建这个几何图形,这很简单:
首先,开始一个简单的2D形状,而不是3D几何形状,并想象你将墙分为3个部分 - 门的左侧,门的右侧,门上方。您可能会注意到只有3个矩形,其位置和大小取决于墙壁和门的位置和大小。 这只给你6个三角形,它们基本上就是墙的正面。现在你在一些小距离处添加了6个相似的三角形(但记得要反映它们的法线)并且你有一个墙的第二面。您还需要8个窄矩形来连接几何体的两侧,然后就完成了。
我没有给你任何具体的方程,因为它是真正基本的数学,比如+和 - 但是如果你还有问题我可以帮你进一步。我认为你可能会遇到更多关于实际网格数据的问题,比如顶点索引等,但是要了解网格内部结构,这是一个很好的练习。
顺便说一句:你最好把墙拆成5个部分,而不是3个部分,它会给你一个更好的网格,但我现在不想让它过于复杂。顺便说一句2:你可能也会扩展这个解决方案,以便将来使用更多的门/窗口,但现在让我们坚持你的问题:)。