从3D立方贝塞尔曲线路径获得一致的法线

时间:2014-08-22 18:10:57

标签: 3d unity3d bezier normals

我正在编写一个包含BezierPoints列表的BezierPath类。每个BezierPoint都有一个位置,一个inTangent和一个outTangent:

enter image description here

BezierPath包含从路径获取线性位置和切线的函数。我的下一步是提供从路径中获取法线的功能。

我知道3D中任何给定的行都会有无限数量的垂直线,因此不会有一个设定的答案。

我的目标是让用户能够在每个BezierPoint上指定法线(或滚动角?),我将在它们之间进行插值以获得沿路径的法线。我的问题是我不知道如何选择起始切线(默认切线应该是什么?)。

我首次尝试获取起始切线是使用Unity3D方法Quaternion.LookRotation

Quaternion lookAt = Quaternion.LookRotation(tangent);
Vector3 normal = lookAt * Vector3.up;
Handles.DrawLine(position, position + normal * 10.0f);

这导致以下结果(绿线是切线,蓝色是法线):

enter image description here

在大多数情况下,这似乎是一个很好的基础结果,但看起来某些方向有突然的变化:

enter image description here

所以我的问题是:是否有一种很好的方法可以获得3D中线条的一致默认法线?

谢谢, VES

0 个答案:

没有答案