我在 Qt 应用程序中遇到一个问题,涉及使用 VTK(可视化工具包)的动画。使用本机 VTK 渲染时,我的动画可以无缝运行。但是,当 Qt 开始通过 vtkGenericOpenGLRenderWindow 管理渲染时,动画将停止工作。在 Qt 版本中,立方体视图不会平滑旋转,而是突然到达终点。
是否应该使用特定的设置或方法来确保 VTK 动画在 Qt 环境中正确集成?
for (int frame = 0; frame < self->animatorTotalFrames_; ++frame)
{
viewCubeWidget->InterpolateCamera(frame);
viewCubeWidget->parentRenderer_->ResetCamera();
viewCubeWidget->Render();
}
在检查
Render()
调用的差异时,我观察到以下情况:
原生VTK场景下,我们直接执行
vtkOpenGLRenderWindow::Render()
。但是,在 Qt 应用程序中,会调用 vtkGenericOpenGLRenderWindow::Render()
,内部会调用 vtkOpenGLRenderWindow::Render()
。
void vtkGenericOpenGLRenderWindow::Render()
{
if (this->ReadyForRendering)
{
vtkOpenGLCheckErrorMacro("error before running VTK rendering code");
if (!this->Initialized)
{
this->OpenGLInit();
}
this->MakeCurrent();
if (!this->IsCurrent())
{
vtkLogF(TRACE, "rendering skipped since `MakeCurrent` was not successful.");
}
else
{
// Query current GL state and store them
auto state = this->GetState();
state->Reset();
state->Push();
this->Superclass::Render(); // CALLED vtkOpenGLRenderWindow::Render()
// Restore state to previous known value
state->Pop();
}
vtkOpenGLCheckErrorMacro("error after running VTK rendering code");
}
}
void vtkOpenGLRenderWindow::Render()
{
if (this->Initialized)
{
vtkOpenGLRenderUtilities::MarkDebugEvent("Starting vtkOpenGLRenderWindow::Render");
}
this->Superclass::Render();
if (this->FirstRenderTime < 0)
{
this->FirstRenderTime = vtkTimerLog::GetUniversalTime();
}
this->GetShaderCache()->SetElapsedTime(vtkTimerLog::GetUniversalTime() - this->FirstRenderTime);
if (this->NoiseTextureObject && this->GetTextureUnitForTexture(this->NoiseTextureObject) >= 0)
{
this->NoiseTextureObject->Deactivate();
}
if (this->Initialized)
{
vtkOpenGLRenderUtilities::MarkDebugEvent("Completed vtkOpenGLRenderWIndow::Render");
}
}
我尝试寻找解决方案,但我找到的解决方案并不适合我的情况。
for (int frame = 0; frame < self->animatorTotalFrames_; ++frame)
{
self->InterpolateCamera(frame);
self->parentRenderer_->ResetCamera();
self->Render();
QCoreApplication::processEvents();
}
我认为这是同样的问题在此处输入链接描述