質問

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);}

残念ながら機能しません。アイデアはありますか、それを達成する方法は?

ありがとうございました

役に立ちましたか?

解決

探しているものを手に入れるには、乗算するのではなく、割り当てる必要があると思います。

つまり、スライダーが-179から+180度までの値を持つように設定されている場合、次のように言うことができます。

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

私が使用していることに注意してください = それ以外の *=. 。これにより、スライダーは直感的に振る舞います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top