【发布时间】: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 应用程序都可以做到这一点......我只是不确定如何。
【问题讨论】: