Вращения с QQuaternion и QSlider - PullRequest
       15

Вращения с QQuaternion и QSlider

2 голосов
/ 12 января 2012

Я реализовал Objectrotation с QQuaternion и QPushButton. Пока нажата кнопка 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 Ответ

1 голос
/ 13 января 2012

Я думаю, что, чтобы получить то, что вы ищете, вы должны назначить, а не умножить.

То есть, если у вашего ползунка установлены значения от -179 до +180 градусов, то вы можетепросто скажите:

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

Обратите внимание, что я использую = вместо *=.Это заставляет слайдер вести себя интуитивно.

...