我正在为具有给定点的网格创建顶点数组。到目前为止,我能够创建一个具有厚度的连续网格。但是,在两个线段的交叉处存在问题,这些线段之间的向量尺寸需要根据具体情况而变大或变小,以便持续观察。
我现在拥有的内容:
对于给定的角度θ1和θ2,我如何计算红色矢量的长度?
我想要的是什么:
我如何构建网格
答案 0 :(得分:1)
你可能会让它变得比它需要的更复杂。
让我们从计算红色箭头开始。对于任何线段(p_i, p_j)
,我们可以使用:
dir = normalize(p_j - p_i)
normal = (-dir.y, dir.x) //negate if you want the other direction
在两个段之间的连接点,我们可以平均(并重新标准化)事件法线。这给了我们红色箭头。
剩下的唯一问题是你需要转移多少。给定顶点o_l
的偏移量的线段o_v
的结果偏移量为:
o_l = o_v * dot(normal_l, normal_v)
这意味着以下内容:两个法线都是单位向量。因此,他们的点积最多只有一个。两个线段平行时就是这种情况。然后,顶点的整个偏移量被传递到线。角度越小,转移的偏移越小。例如。如果两个连续线段之间的角度为120°,则法线的点积为0.5。如果将顶点沿法线移动1个单位,则两个线段的厚度均为0.5。
因此,为了产生特定的线条粗细(o_l
),我们需要将顶点移动o_v
:
o_v = o_l / dot(normal_l, normal_v)
对顶点法线的线段平均值求平均的构造确保dot(normal_l1, normal_ v) = dot(normal_l2, normal_v)
,即在任何情况下两条线的结果线厚度相等。