2012-01-12 10 views
2

QQuaternionとQPushButtonでObjectrotationを実装しました。 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

関連する問題