Вращения с Qquaternion и QSLIDER
-
27-10-2019 - |
Вопрос
Я внедрил субъектр с 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);
Обратите внимание, что я использую = вместо *=
. Анкет Это делает это слайдер вести себя интуитивно.