如何在opengl qt中制作振动动画

时间:2012-12-23 23:13:06

标签: qt opengl animation

我正试图让角色做出振荡动作。也就是说,角色将通过旋转到某个角度(比如60度)开始,然后慢慢回到直立位置,然后向相反方向旋转小于60的角度,比如说55,然后再做一遍直到旋转角度达到零,角色停止。目前我试图通过声明全局变量并使用if块检查它们并在这些块中将它们的值改变1度来实现这一点,这样每次定时器调用paintgl时它会将角度减小1度并绘制对象从而使其成为现实看起来它正在慢慢旋转。我在阻止这个角色时遇到了麻烦。这是我处理它的代码的一部分;

  glRotatef(j,0,1,0);
glRotatef(k,0,1,0);

if(flag)
{
    j = j + 2;
    if (j == 0)
     {
        k = 60;
        flag = !flag;

    }
}

if(!flag)
{

    k = k - 2;
    if(k == 0)
    {
        j = -60;
        flag = !flag;
    }
}

gluCylinder(player, 1,1,8,100,100);

这里圆柱体是我的角色,if块增加/减少全局变量j和k。 j初始化为-60,k初始化为60。

我怎样才能使这个东西起作用,我怎么能阻止它呢。

1 个答案:

答案 0 :(得分:0)

kj浮点变量吗?如果是这样,精确比较将不起作用,因为浮点数本质上是不精确的。你必须采取差异并测试它是否低于某个阈值。

然而,对于简单的振荡,我只是将时间用于正弦函数并使用其输出(在-1 ... 1范围内)作为缩放和偏移到所需动画状态的函数的输入。 / p>

这样做的通用方法是实现动画曲线系统。即您可以输入用于构造分段插值函数的参数,这些参数用作输入变量时间,输出变量用作用户参数化的插值,即您。搜索“动画曲线系统”了解详细信息。