C++ Qt OpengL-三维固定场景的旋转

C++ Qt OpengL-三维固定场景的旋转,c++,qt,opengl,C++,Qt,Opengl,我正在使用OpenGL渲染处理Qt/GPU/OpenCL代码。它执行一个3D场景的动画,我成功地用鼠标旋转了这个3D场景,同时播放了动画。但当我暂停动画时,即当3D场景固定时,旋转不起作用 以下是鼠标旋转的两个功能: void GLWidget::mousePressEvent(QMouseEvent *event) { lastPos = event->pos(); } void GLWidget::mouseMoveEvent(QMouseEvent *event)

我正在使用OpenGL渲染处理Qt/GPU/OpenCL代码。它执行一个3D场景的动画,我成功地用鼠标旋转了这个3D场景,同时播放了动画。但当我暂停动画时,即当3D场景固定时,旋转不起作用

以下是鼠标旋转的两个功能:

void GLWidget::mousePressEvent(QMouseEvent *event)
 {
     lastPos = event->pos();
 }

 void GLWidget::mouseMoveEvent(QMouseEvent *event)
 {
     float dx = (event->y() - lastPos.y()) / 10.0f;
     float dy = (event->x() - lastPos.x()) / 10.0f;
     float dz = 0.0f;
     float angle = sqrtf((event->x() - lastPos.x()) + (event->y() - lastPos.y()));

     if (event->buttons() & Qt::LeftButton) {
        angle = sqrtf(dx*dx + dy*dy);
        glRotatef(0.1*angle, dx, dy, dz);
       }
 }
当动画处于“暂停”状态时,我希望能够旋转固定场景,当我按下“重新启动”按钮时,我希望动画使用场景旋转完成的最后一个修改图像重新启动

因此,这应该是,在执行暂停之前,如最后一个动画的快照,然后是旋转的可能性,最后是从最后一个3D旋转场景重新启动动画

这是我的主显示函数processCurrent,由QTimer调用,其中draw包含OpenGL函数,当我暂停时,动画设置为false:

 void GLWidget::processCurrent()
{

 if (Galaxy->isFirstLaunch)
    {
    draw();
    printStats();
    //Calling kernel for calculatig subsequent positions
    Galaxy->runCLKernels();
    Galaxy->isFirstLaunch = false;
    glFlush();
    swapBuffers();
    }

 if (animation)
    {
    clWaitForEvents(1, &Galaxy->glEvent);
    draw();
    printStats();
    //Calling kernel for calculatig subsequent positions
    Galaxy->runCLKernels();
    glFlush();
    swapBuffers();
   }

}

你能解释一下为什么这个旋转对固定场景不起作用吗?

你仍然需要绘制场景,如果draw only进行绘制操作,而没有动画操作,runCLKernels进行动画,那么应该可以:

if(animation)
{
    //same as before...
}
else
{
    // I don't know whether or not you would still call WaitForEvents...
    draw();
    printStats();
    // Do NOT calculate subsequent positions, just use what was calculated last time.
    glFlush();
    swapBuffers();
}