【问题标题】:3D mesh generation: How to choose up-axis when extruding 2D shape along 3D curve?3D 网格生成:沿 3D 曲线拉伸 2D 形状时如何选择上轴?
【发布时间】:2018-08-11 07:32:23
【问题描述】:

我有一个 2D 形状(圆形),我想将其沿 3D 曲线拉伸以创建 3D 管状网格。

目前我沿曲线生成横截面(形成最终网格的基础)的方式是沿曲线获取每个控制点,为其创建一个 3D 变换矩阵,然后将我的圆的 2D 点相乘通过这些曲线点矩阵来确定它们在 3D 空间中沿曲线的位置。

为了创建矩阵(从 3 个向量),我使用曲线上的切线作为上向量,世界上 ([0,1,0]) 作为前向量,以及上/前向向量作为右向量。在创建最终矩阵的过程中,所有三个向量也被正交化。

当我的曲线切线与世界向上轴相同时,问题就出现了。即,我的切线向量是 [0,1,0] 并且世界上是 [0,1,0]....因为两个平行向量的叉积不明确....生成的拉伸网格有沿着曲线的这些区域的伪影(挤压、扭曲等)。

我认为一个潜在的解决方案是使用曲线切线和世界向上的点积作为插值,将我的前向矢量从世界向上移动到世界右...换句话说,作为曲线切线接近 [0,1,0],我的前向矢量接近 [1,0,0]...但这也会导致最终网格出现不必要的扭曲。

如何以没有翻转/伪影/扭曲的一致方式沿曲线挤压我的形状?我知道这是可能的,因为各种现成的 3D 应用程序都可以做到这一点......我只是不确定如何。

【问题讨论】:

    标签: matrix vector 3d curve


    【解决方案1】:

    解决此问题的一种方法是将我的 3D 曲线的切线向量视为我感兴趣的平面的法线向量。

    比方说,切向量是

    您现在只需要另外两个与它正交的向量,让我们来吧。

    让我们像这样构造 v:

    (旋转坐标)。因为 v 是 u 和其他东西的叉积的结果,所以你知道 v 与 u 正交。

    (如果你的 x,y,z 坐标相等,此方法将不起作用,在这种情况下,通过将随机数添加到至少两个变量来构造另一个向量,rince&repeat)。 p>

    然后你可以像以前一样简单地构造 w:

    规范化并继续。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多