news 2026/4/3 1:24:16

MotionBlur 演示简单运动模糊

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MotionBlur 演示简单运动模糊

一:主要的知识点

1、说明

本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客

2、知识点纪要

本段代码主要涉及的有①vtkRenderStepsPass的使用


二:代码及注释

import vtkmodules.vtkRenderingOpenGL2 import vtkmodules.vtkInteractionStyle from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkRenderingCore import vtkRenderer, vtkRenderWindow, vtkRenderWindowInteractor, vtkPolyDataMapper, vtkActor from vtkmodules.vtkIOPLY import vtkPLYReader from vtkmodules.vtkRenderingOpenGL2 import vtkRenderStepsPass, vtkSimpleMotionBlurPass def main(): fileName = "Data/Armadillo.ply" colors = vtkNamedColors() colors.SetColor('A1Diff', [255, 204, 77, 255]) colors.SetColor('A2Amb', [51, 51, 255, 255]) colors.SetColor('A2Diff', [51, 255, 204, 255]) colors.SetColor('A3Amb', [128, 166, 255, 255]) colors.SetColor('Bkg', [77, 102, 153, 255]) renderer = vtkRenderer() renderer.SetBackground(colors.GetColor3d("Bkg")) renderWindow = vtkRenderWindow() renderWindow.SetSize(500, 500) renderWindow.SetWindowName('MotionBlur') renderWindow.AddRenderer(renderer) iren = vtkRenderWindowInteractor() iren.SetRenderWindow(renderWindow) reader = vtkPLYReader() reader.SetFileName(fileName) reader.Update() mapper = vtkPolyDataMapper() mapper.SetInputConnection(reader.GetOutputPort()) # 创建3个模型 actor = vtkActor() actor.SetMapper(mapper) actor.GetProperty().SetAmbientColor(colors.GetColor3d('Red')) actor.GetProperty().SetDiffuseColor(colors.GetColor3d('A1Diff')) actor.GetProperty().SetSpecular(0.0) actor.GetProperty().SetDiffuse(0.5) actor.GetProperty().SetAmbient(0.3) actor.SetPosition(-0.1, 0.0, -0.1) renderer.AddActor(actor) actor = vtkActor() actor.SetMapper(mapper) actor.GetProperty().SetAmbientColor(colors.GetColor3d('A2Amb')) actor.GetProperty().SetDiffuseColor(colors.GetColor3d('A2Diff')) actor.GetProperty().SetSpecularColor(colors.GetColor3d('Black')) actor.GetProperty().SetSpecular(0.2) actor.GetProperty().SetDiffuse(0.9) actor.GetProperty().SetAmbient(0.1) actor.GetProperty().SetSpecularPower(10.0) renderer.AddActor(actor) actor = vtkActor() actor.SetMapper(mapper) actor.GetProperty().SetDiffuseColor(colors.GetColor3d('A3Amb')) actor.GetProperty().SetSpecularColor(colors.GetColor3d('White')) actor.GetProperty().SetSpecular(0.7) actor.GetProperty().SetDiffuse(0.4) actor.GetProperty().SetSpecularPower(60.0) actor.SetPosition(0.1, 0.0, 0.1) renderer.AddActor(actor) """ SetMultiSamples(0) 禁用多重采样抗锯齿 SetMultiSamples 设置为大于1的值时(例如 4 或 8), 图形卡会为每个像素在多个位置采样颜色和深度信息,然后将这些样本混合起来, 从而产生平滑的边缘。 """ renderWindow.SetMultiSamples(0) """ vtkRenderStepsPass 属于VTK的渲染管线的高级部分,它是一个渲染步骤通道(Render Pass)类,用于调试和分阶段执行渲染过程 在现代VTK中(尤其是8.X以后的版本),渲染过程被模块化为一系列 渲染步骤,比如 绘制几何体(geometry pass) 绘制阴影(shadow pass) 绘制透明度(translucent pass) 绘制体数据(volume pass) 绘制后期处理(post-processing pass) 这些步骤可以由一个"Pass管线"按顺序执行 其主要作用是:封装并依次执行 VTK 的标准渲染步骤,用于调试或自定义渲染流程 vtkRenderStepPass 内部通常会依次执行以下pass 顺序 渲染阶段(Pass) 说明 1 vtkSequencePass 渲染步骤序列管理器(内部容器) 2 vtkLightsPass 设置光照 3 vtkCameraPass 应用相机变换 4 vtkOpaquePass 绘制不透明物体 5 vtkTranslucentPass 绘制透明物体 6 vtkVolumetricPass 绘制体渲染对象(volume) 7 vtkOverlayPass 绘制叠加层(文本、UI) """ basicPasses = vtkRenderStepsPass() """ vtkSimpleMotionBlurPass 是一个 图像后期处理(post-processing)渲染 pass,用于在渲染结果中实现运动模糊(Motion Blur)效果 它在渲染完成后,对场景的多帧进行时间平均,从而模拟 相机快门导致的运动模糊效果 工作原理:“渲染多帧场景 → 累积图像 → 平均 → 产生模糊感” 渲染结构的关系: vtkSimpleMotionBlurPass并不自己绘制几何体,它是一个"包裹"pass,必须包裹一个基础渲染pass。 例如: vtkCameraPass └── vtkSimpleMotionBlurPass └── vtkRenderStepsPass 整个链条会按层次执行: vtkRenderStepsPass → 绘制正常场景 vtkSimpleMotionBlurPass → 对渲染结果做累积与平均 vtkCameraPass → 管理相机和最终合成 """ motion = vtkSimpleMotionBlurPass() """ SetDelegatePass 指定内部真正负责绘制场景的渲染pass vtkSimpleMotionBlurPass的其余方法: SetNumberOfFrames(number):设置渲染并累积的帧数(数值越大,模糊越平滑,但性能越低) GetNumberOfFrames():获取帧数 Render():执行渲染与混合操作 ReleaseGraphicsResources():释放显存和缓冲区资源 """ motion.SetDelegatePass(basicPasses) """ SetPass: vtk中,渲染器(vtkRenderer)有两种工作模式: 1、默认渲染模式, 使用VTK内部默认流程,绘制几何体、光照、透明、叠加层等 2、自定义Render Pass模式 通过 renderer.SetPass() 手动设置一条自定义渲染管线,由你控制渲染的每个步骤 当调用 renderer.SetPass(some_pass) 时, 就告诉 VTK:“别用你默认的渲染方式,用我指定的渲染 pass 管线来绘制场景。” """ renderer.SetPass(motion) numRenders = 30 renderer.GetActiveCamera().SetPosition(0, 0, -1) renderer.GetActiveCamera().SetFocalPoint(0, 0, 0) renderer.GetActiveCamera().SetViewUp(0, 1, 0) renderer.ResetCamera() renderer.GetActiveCamera().Azimuth(15.0) renderer.GetActiveCamera().Zoom(1.2) renderWindow.Render() for i in range(0, numRenders): renderer.GetActiveCamera().Azimuth(10.0 / numRenders) renderer.GetActiveCamera().Elevation(10.0 / numRenders) renderWindow.Render() iren.Start() if __name__ == '__main__': main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/1 1:21:56

RustFS技术演进:构建下一代高性能存储架构的关键路径

RustFS技术演进:构建下一代高性能存储架构的关键路径 【免费下载链接】rustfs 🚀 High-performance distributed object storage that is faster than MinIO 项目地址: https://gitcode.com/GitHub_Trending/rus/rustfs 在数据爆炸式增长的AI时代…

作者头像 李华
网站建设 2026/3/25 6:46:21

对比分析:PyTorch安装教程GPU vs TensorFlow 2.9安装体验

对比分析:PyTorch安装教程GPU vs TensorFlow 2.9安装体验 在深度学习项目启动的那一刻,大多数开发者面临的第一个挑战往往不是模型设计或数据清洗,而是——环境能不能跑起来? 尤其是当你满怀期待地打开新电脑,准备复现…

作者头像 李华
网站建设 2026/4/1 13:49:39

AvaloniaUI命令绑定终极指南:从新手到专家的完整解决方案

AvaloniaUI命令绑定终极指南:从新手到专家的完整解决方案 【免费下载链接】Avalonia AvaloniaUI/Avalonia: 是一个用于 .NET 平台的跨平台 UI 框架,支持 Windows、macOS 和 Linux。适合对 .NET 开发、跨平台开发以及想要使用现代的 UI 框架的开发者。 …

作者头像 李华
网站建设 2026/3/31 4:51:07

GoView数据可视化低代码平台:零基础5分钟搭建专业级报表的终极指南

GoView数据可视化低代码平台:零基础5分钟搭建专业级报表的终极指南 【免费下载链接】go-view 🏆GoView 是一个Vue3搭建的低代码数据可视化开发平台,将图表或页面元素封装为基础组件,无需编写代码即可完成业务需求。 它的技术栈为&…

作者头像 李华
网站建设 2026/4/3 1:24:15

借助AI模仿前人顶刊论文写作套路!只需三步轻松写出自己的原创论文(附AI提示词)

在和很多同仁沟通学术写作时,我发现大家在写论文时,会出现无从下手的窘况,看了一堆前人的作品,怎么看怎么好,就是不知道怎么借鉴和模仿,不知道从哪下手,“抄”多了怕被判定为抄袭,“抄”少了写出的文章又缺乏深度。其实最实在又不会被判定为抄袭的办法,就是拆解顶刊论…

作者头像 李华
网站建设 2026/3/29 8:07:50

KoNLPy完整指南:轻松实现韩语自然语言处理

KoNLPy完整指南:轻松实现韩语自然语言处理 【免费下载链接】konlpy Python package for Korean natural language processing. 项目地址: https://gitcode.com/gh_mirrors/ko/konlpy 想要快速上手韩语文本分析却不知从何开始?KoNLPy作为Python生态…

作者头像 李华