2

我已经使用 QQuaternion 和 QPushButton 实现了 Objectrotation。只要按下 plus_x_button,就会激活插槽 rotate_plus_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 expexts 一个不可更改的角度。您知道如何实现这一目标吗?我已经尝试过使用 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);}

不幸的是它不起作用。你有一个想法,如何实现?

谢谢

4

1 回答 1

1

我认为要得到你正在寻找的东西,你应该分配而不是相乘。

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

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

请注意,我使用=而不是*=. 这使得滑块的行为直观。

于 2012-01-13T18:27:20.100 回答