我正在使用 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 函数,并在我暂停时animation
设置为: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();
}
}
你能解释一下为什么这种旋转不适用于固定场景吗?