在动画Opengl c / c ++中需要帮助

时间:2015-11-13 00:05:19

标签: c++ c opengl animation

当一个点到达底部时,我试图将其反弹。不幸的是,它一直在下降。这是代码:

void Timer(int value) {
    if (value) {
        if(initMpoints[1][1] <= 500 && initMpoints[0][1] >= 0) {
            txForC -= 0;
            tyForC -= 5;            //Move C downward.
            txForM -= 0;
            tyForM -= 5;
            if (initMpoints[0][1] == 0) {
                txForC += 0;
                tyForC += 5;            //Move C downward.
                txForM += 0;
                tyForM += 5;
            }
        }

    }
    glutPostRedisplay();
    glutTimerFunc(50, Timer, value);
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

使用abs(sin(x))函数可以完成非常好且更自然的弹跳胺化示例。

enter image description here

在你的情况下,我将重写你的功能。

// Speed of bouncing
float fSpeed = 0.01f;
float fPI = 3.1415926f;

// Height of bouncing
float fHeight = 100.0f;

void Timer(int iValue)
{
    static float fAngle = 0.0;

    // if animation enabled
    if (iValue)
    {
        tyForC = fHeight * abs(sin(fAngle));
        tyForM = fHeight * abs(sin(fAngle));

        // Go to next position
        fAngle += fSpeed;
    }

    // Restore previous value to avoid bitgrid overflow
    if (fAngle >= (4.0f * fPI - fSpeed / 2.0))
    {
        fAngle = 0.0f;
    }

    glutPostRedisplay();
    glutTimerFunc(50, Timer, iValue);
}
对于你喜欢动画的牙齿,代码就像

float fHeight = 100.0f;

void Timer(int iValue)
{
    static float deltaC = 5.0f;
    static float deltaM = 5.0f;

    if (iValue)
    {
        tyForC += deltaC;
        tyForM += deltaM;

        if (tyForC <= 0 || tyForC >= fHeight)
            deltaC *= -1.0f;

        if (tyForM <= 0 || tyForM >= fHeight)
            deltaM *= -1.0f;
    }

    glutPostRedisplay();
    glutTimerFunc(50, Timer, iValue);
}