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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top