Frage

Ich habe eine Objektrotation mit Qquaternion und Qpushbutton implementiert. Solange der Plus_X_Button gedrückt wird, wird der Slot rotate_plus_x () aktiviert. Jeweils für 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(){...}

Jetzt möchte ich die Funktionalität mit einem Qslider anstelle des Qpushbuttons erkennen. Mit einem Bereich zwischen -180 ° und 180 °, aber dann habe ich das Problem, dass ich seltsame Ergebnisse erzielte, da der Wert des QSLIDER geändert wird und der Qquaternion einen Nonchangebelwinkel verändert. Haben Sie eine Idee, wie Sie das erreichen können? Ich habe es mit If-Statements ausprobiert. Etwas wie:

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

Leider funktioniert es nicht. Haben Sie eine Idee, wie Sie das erreichen können?

Vielen Dank

War es hilfreich?

Lösung

Ich denke, dass Sie, um das zu bekommen, wonach Sie suchen, nicht zuweisen, anstatt sich zu vermehren.

Das heißt, wenn Ihr Slider auf Werte von -179 bis +180 Grad eingestellt ist, können Sie nur sagen:

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

Beachten Sie, dass ich benutze = Anstatt von *=. Das macht den Schieberegler intuitiv.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top