贝塞尔

贝塞尔

供CET开发者使用。这是贝塞尔曲线(单段及多段贝塞尔曲线)的实现。

我终于把我的贝塞尔曲线实现移植到了Lua 这里的内容足够多,我觉得比起在cet-snippets频道上传一个压缩文件,不如制作一个小型演示模组更好。

日志查看器在这里

贝塞尔曲线的实现其实很简单,
但如果你想将多个贝塞尔曲线段连接起来,
就会变得更加复杂。 对于一条贝塞尔曲线,你有两个端点和N个控制点(通常为一或两个)。  曲线会穿过端点,但绝不会触及控制点(除非所有点都在同一直线上,但那样的话还有什么意义呢) 如果你有两个贝塞尔曲线段,当控制点与该中间端点共线时,可以使路径在中间端点处平滑过渡 其中一个辅助函数是根据端点数组和百分比(用于控制曲率)返回贝塞尔曲线段的数组。 还有一些辅助函数,可以沿着路径(路径可以是开放的或闭合的)按固定的百分比间隔返回一系列采样点

v5: 有一个边缘情况最终被执行了,它使用了C#版本的变量名而非Lua版本的名称 v4: 函数调用中的参数被交换了(count, segments)。  这种调用通常不会发生,属于那些边缘情况的清理工作之一。 v3: 有一个名为Quaternion_FromAxisRadians的函数,它是游戏实现的封装。  实际上,轴需要是一个单位向量。 遇到了一个异常情况,其中某个相对于其他部分极小的片段导致该片段没有采样点(现在已正确跳过该片段) 我继续添加了AnimationCurve类(正在我的另一个mod中开发它) v2: 从 C# 移植时,有一个 [0] 本应是 [1] 在 GetSegments 中,它会比较线段长度和角度,并稍微更好地调整沿百分比 制作了两个版本的 GetBezierPoints_Segments

  • 均匀分布版本的点均匀分布,对于平滑曲线效果良好,但对于收缩曲线效果不佳
  • 标准根据相对片段长度更好地调整计数