旋转对象指向鼠标位置

时间:2013-12-12 09:48:22

标签: c++ opengl geometry cinder

我有一个宇宙飞船的图像,我想旋转它指向鼠标位置。 要计算我必须旋转的角度,我使用以下代码:

void CinderGaemApp::CalculateAngleBetweenMouseAndObject()
{    
  float deltaY = mouseLoc_.y - 10; //hardcoded y coordinate of the tip of the spaceship
  float deltaX = mouseLoc_.x - 0; //hardcoded x coordinate of the tip of the spaceship

  angleInDegrees_ = atan2(deltaY,deltaX) * 180 / 3.141;
}

之后我更新了我的播放器对象:

void Player::update(float degree)
{
  gl::pushMatrices();
    gl::translate(20,20);
    gl::rotate(degree);
    gl::translate(-20,-20);
  gl::popMatrices();
}

然后我画它。但我的问题是,当我使用gl::popMatrices()时,图像根本不会移动。如果我删除gl::popMatrices(),图像会先旋转2秒钟左右,然后再指向鼠标。我的代码有什么问题吗?如果您需要更多代码,请发表评论,我不确定您需要多少信息。

1 个答案:

答案 0 :(得分:1)

您需要将序列放在渲染函数中:

void Player::render()
{
  gl::pushMatrices();
    gl::translate(position.x, position.y);
    gl::translate(20,20);
    gl::rotate(my_degree);
    gl::translate(-20,-20);
    // do other render operations
  gl::popMatrices();
}

更新只是

void Player::update(float degree)
{
  my_degree=degree;
}

因为匹配pushMatrixpopMatrix之间的每个块都是独立的,所以您在更新中的代码是noop