Rotations avec QQuaternion et QSlider
-
27-10-2019 - |
Question
J'ai mis en place un Objectrotation avec QQuaternion et QPushButton. Tant que le plus_x_button est poussé le rotate_plus_x de fente () est activé. Pour minus_x Respectivement.
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(){...}
Maintenant, je voudrais réaliser la fonctionnalité avec un QSlider au lieu du QPushButton. Avec une plage comprise entre -180 ° et 180 ° Mais j'ai le problème que je reçois des résultats étranges parce que la valeur de QSlider est modifiée et la QQuaternion expexts un angle nonchangeble. Avez-vous une idée de comment y parvenir? Je l'ai essayé avec si-déclarations. Quelque chose comme:
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);}
Malheureusement, sa ne fonctionne pas. Avez-vous une idée, comment y parvenir?
Merci
La solution
Je pense que pour obtenir ce que vous cherchez, vous devez assigner au lieu de se multiplier.
C'est, si vous curseur est réglé sur des valeurs de -179 à +180 degrés, alors vous pouvez simplement dire:
OpenGLScene::anglex = slidervalue;
test->rotation = QQuaternion::fromAxisAndAngle(QVector3D(1,0,0),OpenGLScene::anglex);
Notez que j'utilise = au lieu de *=
. Qui fait que le curseur se comportent de manière intuitive.