0

私は Open GL プロジェクトを持っています。2D オブジェクトは、目的地に到達するまで目的地に向かって移動し、現在の X と Y が目的地の X と Y に到達するまで停止します。私の glutTimerFunc のコードは次のとおりです。

void callbackTimerGlutFunc(int value)
{
    spinX += SPEED_X;
    spinZ += SPEED_Z;
    if (spinX > 360.0) {
        spinX = spinX - 360.0;
    }
    if (spinZ > 360.0) {
        spinZ = spinZ - 360.0;
    }

    if (xPos != DESTINATION_X || yPos != DESTINATION_Y)
    {
        if (xPos < DESTINATION_X)
            xPos += speed;
        if (xPos > DESTINATION_X)
            xPos -= speed;

        yPos = cosf(xPos); // THIS IS THE NEW Y CALCULATION
    }

    glutPostRedisplay();
    glutTimerFunc(100, callbackTimerGlutFunc, value);
}

基本的に、現在の x (xPos) は、Destination X から離れているか近いかに基づいてインクリメントします。明らかに、これは機能しません。私は cosf を間違って使用しているだけだと確信しています。目的地 x と y に素敵な種類の「正弦波」を得る方法を知っている人はいますか?

ああ、私は私の表示機能でこの機能を使用しています:

glTranslatef(xPos, yPos, 0.0);
4

1 に答える 1

0

cosfは、ラジアンとして入力される倍精度(浮動小数点)を取ります。これは、1.0の増分では、yの各方向に最大4ステップしかないことを意味します。xを0.1などの浮動小数点値でインクリメントしてみてください。

于 2013-02-05T19:23:08.927 に答える