我已经通过关于PaintGL的不同线程对SO进行了一些研究,但是我无法找到让我的工作/完全理解所需的东西。
我正在尝试绘制一个立方体。我的按钮被点击后立即旋转立方体。 (只有点击它,没有定时器等) 为了确定角度,我使用变量xAngle。我可以通过函数setAngleCube()修改它,但我的立方体似乎没有移动。 (我看到var'i'每次都被更改。) 为什么?我怎么能让它发挥作用?
对我来说,看起来立方体只是保留了构造函数的值,并且不再使它们变形了。
溶液: 在按钮的插槽中添加此行 UI->小窗口> setCubeAngle(UI->小窗口> getCubeAngle()+ 5);
归功于@Alexander Chernin
我的代码:
MyGLWidget::MyGLWidget(QWidget *parent)
: QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
{
xRot = 0;
yRot = 0;
zRot = 0;
xAngle=15;
qDebug("constructor\n") ;
}
void MyGLWidget::setCubeAngle(int angle)
{
xAngle = angle;
qDebug("angle set\n");
}
int MyGLWidget::getCubeAngle()
{
return xAngle;
}
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
Glptr = new MyGLWidget();
}
void Widget::on_pushButton_clicked()
{
static int i;
i+=5;
Glptr->setCubeAngle(i);
update();
qDebug()<<i<<endl;
ui->widget->setCubeAngle(ui->widget->getCubeAngle()+5); //SOLUTION
}
void MyGLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
qDebug("painting cube\n");
qDebug()&LT;
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(getCubeAngle(),0.0,1.0,0.0); //rotate 30 degress around y-axis
glRotatef(5.0,1,0.0,0.0); //rotate 15 degress around x-axis
glBegin(GL_QUADS);
//back
glColor3f(1,0,0);
glVertex3f(-0.5, 0.2,-0.5 );
glVertex3f(-0.7, 0.2,-0.5);
glVertex3f(-0.7, -0.2,-0.5 );
glVertex3f(-0.5, -0.2,-0.5);
//some similar code to draw other sides of the cube
}
答案 0 :(得分:1)
尝试在MyGLWidget :: setCubeAngle中调用updateGL():
void MyGLWidget::setCubeAngle(int angle)
{
xAngle = angle;
qDebug("angle set\n");
updateGL();
}