使用QQuaternion和QSlider旋转

时间:2012-01-12 19:13:59

标签: qt rotation quaternions qslider

我已经用QQuaternion和QPushButton实现了一个Objectrotation。 只要按下plus_x_button,插槽rotate_plus_x()就会被激活。 分别为minus_x。

void OpenGLScene::rotate_plus_x()
{
  OpenGLScene::anglex = 2;
  test->rotation *= QQuaternion::fromAxisAndAngle(QVector3D(1,0,0),OpenGLScene::anglex);
  update();
}

void OpenGLScene::rotate_minus_x()
{
  OpenGLScene::anglex = -2;
  test->rotation *= QQuaternion::fromAxisAndAngle(QVector3D(1,0,0),OpenGLScene::anglex);
  update();
}
void OpenGLScene::rotate_plus_y(){...}
void OpenGLScene::rotate_minus_y(){...}

void OpenGLScene::rotate_plus_z(){...}
void OpenGLScene::rotate_minus_z(){...}

现在我想用Qslider而不是QPushButton来实现这个功能。 范围在-180°和180°之间 但后来我遇到的问题是,我得到了奇怪的结果,因为Qslider的值发生了变化,而且QQuaternion的角度变化不大。 你知道如何实现这一目标吗?我用if语句尝试过它。 类似的东西:

if(slidervalue<0){
OpenGLScene::anglex = -2;
test->rotation *= QQuaternion::fromAxisAndAngle(QVector3D(1,0,0),OpenGLScene::anglex);}
else{
OpenGLScene::anglex = 2;
test->rotation *= QQuaternion::fromAxisAndAngle(QVector3D(1,0,0),OpenGLScene::anglex);}

不幸的是它没有用。你有什么想法,如何实现这个目标?

谢谢

1 个答案:

答案 0 :(得分:1)

我认为要获得你想要的东西,你应该分配而不是繁殖。

也就是说,如果您将滑块设置为-179到+180度的值,那么您可以说:

OpenGLScene::anglex = slidervalue;
test->rotation = QQuaternion::fromAxisAndAngle(QVector3D(1,0,0),OpenGLScene::anglex);

请注意,我使用 = 而不是*=。这使得滑块表现得很直观。