1
我正在使用OpenGL呈现Qt/GPU/OpenCL代码。它执行3D场景的动画,并且在动画时,我可以用鼠标旋转这个3D场景。但是当我暂停动画时,即3D场景“固定”时,旋转不起作用。Qt OpengL - 旋转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();
}
}
你能解释我为什么这个旋转没有按” t与固定的场景一起工作?
感谢,我忘了“画”功能。 – youpilat13