2012-01-12 2 views
2

Я реализовал Objectrotation с QQuaternion и QPushButton. Если нажать кнопку plus_x_button, активируется слот rotate_plus_x(). Соответственно для minus_x.Вращения с QQuaternion и QSlider

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

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

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

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

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

+0

спасибо. Это была именно проблема – buddy

Смежные вопросы