我已经用QQuaternion和QPushButton实现了一个Objectrotation。 只要按下plus_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的值发生了变化,而且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);}
不幸的是它没有用。你有什么想法,如何实现这个目标?
谢谢
答案 0 :(得分:1)
我认为要获得你想要的东西,你应该分配而不是繁殖。
也就是说,如果您将滑块设置为-179到+180度的值,那么您可以说:
OpenGLScene::anglex = slidervalue;
test->rotation = QQuaternion::fromAxisAndAngle(QVector3D(1,0,0),OpenGLScene::anglex);
请注意,我使用 = 而不是*=
。这使得滑块表现得很直观。