0

我有一个 Open GL 项目,其中我有一个 2D 对象,它应该向目标点移动直到它碰到它,然后它将停止,直到 currentX 和 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) 是离目的地 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 回答