opengl gluLookAt()旋转的问题

uttx8gqw  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(141)

总结一下:

  • 当玩家静止并旋转时,摄像头在旋转约180度后跳回到原始位置
  • 在玩家旋转一点后,场景“跳跃”,然后向前移动
  • 当向前移动并同时旋转时,旋转看起来行为正常

我猜想spin()函数是罪魁祸首,但是播放器模型旋转得很好;是“照相机”不能正常工作,所以它可能在我的display()代码中。我不知道什么地方出了问题。
这里有一个gif,可以很容易地显示正在发生的事情。http://i.imgur.com/eGCuUN7.gifv
下面是相关代码:

void Player::spinLeft()
{
    direction += SPIN_SPEED;
    double radians = direction / 180 * 3.141592654;
    xSpeed += cos(radians);
    ySpeed += sin(radians);

    glutPostRedisplay();
}

void Player::spinRight()
{
    direction -= SPIN_SPEED;
    double radians = direction / 180 * 3.141592654;
    xSpeed += cos(radians);
    ySpeed += sin(radians);

    glutPostRedisplay();
}

void Player::moveForward()
{
    double radians = direction / 180 * 3.141592654;
    xSpeed = cos(radians);
    ySpeed = sin(radians);
    double nextX = x + xSpeed*MOVE_SPEED;
    double nextY = y + ySpeed*MOVE_SPEED;

    if (!gMaze.insideWall(nextX, nextY, size))
    {
        x += xSpeed*MOVE_SPEED;
        y += ySpeed*MOVE_SPEED;
    }

    glutPostRedisplay();
}

标题:
第一个

xj3cbfub

xj3cbfub1#

您的spinLeftspinRight不正确。您只需要:

xSpeed = cos(radians);
ySpeed = sin(radians);

当你向前走的时候,它是正确的,因为你在那里就是这样做的。

相关问题