如何修改3D对象';s形状(顶点),如更改其高度或长度的一部分,通过编程添加孔

如何修改3D对象';s形状(顶点),如更改其高度或长度的一部分,通过编程添加孔,3d,geometry,3d,Geometry,我想知道如何修改3D对象的形状(顶点)并创建一个新的形状,比如说通过编程用户的交互(如鼠标移动)来改变其高度的一部分或在其上打一个洞。我贴上了标签WebGl,但我想知道如何在3d世界中实现它的一般想法 如果你不明白我说的,请参考。可以使用它修改三维对象的形状 我不知道它是如何实现的,所以任何关于它的信息都将不胜感激 编辑: 这和我的相似。但我认为,答案不可能达到切割形状之类的效果 EDIT2: 好的,我从下面的文档中得到了一个改变形状的想法。要通过移动点或边来更改形状,我需要让用户选择其中一个,

我想知道如何修改3D对象的形状(顶点)并创建一个新的形状,比如说通过编程用户的交互(如鼠标移动)来改变其高度的一部分或在其上打一个洞。我贴上了标签WebGl,但我想知道如何在3d世界中实现它的一般想法

如果你不明白我说的,请参考。可以使用它修改三维对象的形状

我不知道它是如何实现的,所以任何关于它的信息都将不胜感激

编辑:
这和我的相似。但我认为,答案不可能达到切割形状之类的效果

EDIT2:
好的,我从下面的文档中得到了一个改变形状的想法。要通过移动点或边来更改形状,我需要让用户选择其中一个,然后在用户移动鼠标时更改其坐标


对于一个形状,我想我需要分割或创建与其他形状相交的三角形,以实现tinkerpad具有的相同功能

我要找的是构造性立体几何。


我还没有找到一个很好的资源来理解它是如何在幕后实现的,但我现在知道该去哪里看了。

你想要实现的目标需要掌握几种知识。我想你猜你的问题的答案可能需要一整本书。因此,我将尝试引导您使用适当的工具和概念

首先,您必须将三件不同的事情分开:

  • 用户交互管理,也就是说:如何转换鼠标光标位置和移动(在2D中)以在3D世界中正确使用它

  • 顶点属性(位置、法线等)修改,这可能是最简单的部分

  • 交互式网格结构修改,在这里,我们进入一个领域,比两个第一更复杂

供用户输入 您必须实现所谓的“鼠标拾取”。您必须了解3D投影概念(透视和正交),然后了解如何将2D鼠标光标位置从屏幕“取消投影”到3D世界

为此,您可以在此处找到一些信息:

一旦你实现了这一点,你需要一个强大的算法来快速检测“光线”和网格多边形的交集,这样你就可以知道哪个三角形被击中,在什么位置,等等

为此,您至少需要实现以下功能:

若要检测顶点上的光线投射,可以实现光线球体间距测试,假设每个顶点由具有小半径的虚拟边界球体表示

对于顶点/边属性更改 这一部分很简单,正如您已经发现的,您只需根据鼠标光标的移动调整顶点参数

用于网格结构修改 在这里,您必须实现3D引擎中不常用的功能,因为普通3D引擎主要使用固定结构网格。但如果要轻松编辑网格结构、删除顶点、边、分割多边形等,则需要动态网格数据结构

为此,它存在DCEL(双连接边列表)数据结构。 以下是维基百科概述:

以下是一些数据,用于理解该概念,然后实施该概念:

最后 要把所有这些东西放在一起,你需要理解3D变换,向量是如何工作的,如何通过变换向量、坐标等,通过逆矩阵等,从一个坐标空间传递到另一个坐标空间


祝你好运

阅读下一页不,这不是我要问的。我知道如何转换模型。我了解3d计算机图形学的基本原理。我想知道的是如何通过编程来修改形状(顶点)。所以你需要(有LIB用于这些东西),或者只是一个网格编辑器,或者某种可修改的曲面,甚至是体素贴图?这4个是非常不同的东西,不知道你的目的、形状或它的内部表示,我们只能猜测,因为我在两天前回答了我的问题,我想要的是CSG。无论如何谢谢@SpektreYeah,我也找到了这个图书馆。我可能会尝试深入研究它的源代码,以了解它是如何工作的。无论如何,谢谢你的回答虽然没有给我一个关于CSG的确切答案,但DCEL信息给了我一些关于如何实现它的见解。感谢您的详细解释。对于Sedenion提到的前两件事,如果您不太了解,我建议您阅读“3D数学图形和游戏开发入门,第二版”和“游戏物理食谱”。