首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在3D中沿Bézier路径移动对象:旋转问题

在3D中沿Bézier路径移动对象:旋转问题
EN

Stack Overflow用户
提问于 2011-06-05 15:03:27
回答 2查看 3.2K关注 0票数 1

在我的opengl应用程序中,我在三维空间中有一个Bézier曲线,我想沿着它移动一个对象。一切都好,这是旋转的一部分:我在计算它们时遇到了一些问题。在我看来,这条管道应该是:

  • 在Bézier (位置向量)
  • 上找到切线、法线、双法线(frenet )
  • 求正切向量与x轴
  • 之间的夹角(对于法向和y轴、双法向和z轴相同)

<代码>H 19推送矩阵<代码>H 210<编码>H 111位置上的平移、旋转、绘制物体代码<代码>H 113pop矩阵H 214/代码>F<215/代码>>

但它并没有像我预期的那样进行:旋转似乎是随机的,而且不遵循曲线。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-05 16:16:22

与其计算角度,不如将框架推入模型视图矩阵。在矩阵的左上角3x3处有正规的、二次的和切的go,在第四列中平移,元素4,4是1。用前面提到的毕晓普框架代替法国框架。所以在代码中:

代码语言:javascript
复制
// assuming you manage your curve in a (opaque) struct Bezier
struct BezierCurve;

typedef float vec3[3];

void bezierEvaluate(BezierCurve *bezier, float t, vec3 normal, vec3 binormal, vec3 tangent, vec3 pos);

void apply_bezier_transform(Bezier *bezier, float t)
{
    float M[16]; // OpenGL uses column major ordering
    // and this code is a excellent example why it does so:

   bezierEvaluate(bezier, t, &M[0], &M[4], &M[8], &M[12]);
   M[3] = M[7] = M[11] = 0.;
   M[15] = 1.;

   glMultMatrixf(M);
}
票数 2
EN

Stack Overflow用户

发布于 2011-06-05 15:45:31

你会遇到法国框架的问题,因为不幸的是,当曲线是瞬间直线(有消失的曲率)的时候,它是不确定的,它在密切平面的法线在方向上有很大变化的点周围出现剧烈的摆动,特别是在拐点,在那里法线翻转。

我建议使用所谓的毕晓普框架(你可以谷歌它,并找到如何计算它在一个离散的设置)。它也被称为平行传输帧或最小旋转框架-它的优点是,框架总是定义,它改变方向的控制方式。

我不认为法语框架的问题一定能解释你遇到的问题。您应该从一些简单的测试案例开始--例如,限制在XY平面上的Bezier曲线,然后逐步进行计算,直到找到问题所在。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6243693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档