Qt OpengL-旋转三维固定场景
Qt OpengL - Rotation of a 3D fixed scene
我正在使用OpenGL渲染处理Qt/GPU/OpenCL代码。它执行一个三维场景的动画,我成功地用鼠标旋转了这个三维场景。但当我暂停动画时,即当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();
}
}
你能解释一下为什么这种旋转不适用于固定场景吗?
您仍然需要绘制场景,如果draw()
只进行绘制操作而没有动画操作,而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();
}
相关文章:
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 如何使用qt缩放三维网格
- 三维数组中的C/C++DWORD到BYTE和BYTE到DWORD的转换
- Qt OpengL-旋转三维固定场景
- 用于将三维模型导入OpenGL/C++项目的推荐文件格式和图形库
- OpenGL获取离当前鼠标位置最近的世界三维点的三维坐标
- 我该如何在三维环境中移动,openGL c++
- 如何在现代openGL中绘制带有三维点的多边形
- 如何在OpenGL 3.3中实现三维纹理
- 使用 C++ 和 OpenGL 拖动三维对象
- 在C++中的OpenGL中将坐标从三维透视投影映射到二维正投影
- 在opengl中处理三维或二维图形的点击
- 如何使用OpenGL将体积数据渲染为三维纹理
- 处理三维对象opengl上的单击
- 在OpenGL(C++)中绘制三维场景中的二维文本
- OpenGL在自己的轴上旋转三维立方体
- OpenGL中粒子发射器的简单三维烟雾算法
- 如何在opengl中使相机跟随三维物体
- 在OpenGL中使用鼠标拾取在三维空间中拖动三维点的最佳方式
- 动态三维阵列上的OpenGL glDrawPixels