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