我正在编写一个包含BezierPoints列表的BezierPath类。每个BezierPoint都有一个位置,一个inTangent和一个outTangent:
BezierPath包含从路径获取线性位置和切线的函数。我的下一步是提供从路径中获取法线的功能。
我知道3D中任何给定的行都会有无限数量的垂直线,因此不会有一个设定的答案。
我的目标是让用户能够在每个BezierPoint上指定法线(或滚动角?),我将在它们之间进行插值以获得沿路径的法线。我的问题是我不知道如何选择起始切线(默认切线应该是什么?)。
我首次尝试获取起始切线是使用Unity3D方法Quaternion.LookRotation:
Quaternion lookAt = Quaternion.LookRotation(tangent);
Vector3 normal = lookAt * Vector3.up;
Handles.DrawLine(position, position + normal * 10.0f);
这导致以下结果(绿线是切线,蓝色是法线):
在大多数情况下,这似乎是一个很好的基础结果,但看起来某些方向有突然的变化:
所以我的问题是:是否有一种很好的方法可以获得3D中线条的一致默认法线?
谢谢, VES