我有一个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上得到一个很好的“正弦波”?
OH,我在显示功能中使用此功能:
glTranslatef(xPos, yPos, 0.0);
答案 0 :(得分:0)
cosf采用输入为Radians的double(浮点)。这意味着,在增量为1.0的情况下,y的每个方向只有~4步。您可以尝试将x递增一些浮点值,例如0.1或其他值。