2

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(){...}

ここで、QPushButtonの代わりにQsliderを使用して機能を実現したいと思います。-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);}

残念ながら、機能していません。あなたはそれを達成するためのアイデアを持っていますか?

ありがとうございました

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 に答える