Вопрос

Я внедрил субъектр с Qquathaternion и Qpushbutton. Пока активируется плюс_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 изменяется, а Qquathaternion эксплуатирует нений угол. У вас есть идея, как это достичь? Я попробовал это с помощью IF-Statements. Что-то типа:

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