网站建设项目前景吉林省建设信息管理平台
2026/4/18 19:16:33 网站建设 项目流程
网站建设项目前景,吉林省建设信息管理平台,十款免费软件app下载入口,学院评估 网站建设整改一#xff1a;主要的知识点 1、说明 本文只是教程内容的一小段#xff0c;因博客字数限制#xff0c;故进行拆分。主教程链接#xff1a;vtk教程——逐行解析官网所有Python示例-CSDN博客 2、知识点纪要 本段代码主要涉及的有①vtkShadowMapPass阴影渲染#xff0c;②…一主要的知识点1、说明本文只是教程内容的一小段因博客字数限制故进行拆分。主教程链接vtk教程——逐行解析官网所有Python示例-CSDN博客2、知识点纪要本段代码主要涉及的有①vtkShadowMapPass阴影渲染②RenderPass的解释与使用二代码及注释import vtkmodules.vtkRenderingOpenGL2 import vtkmodules.vtkInteractionStyle from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkIOGeometry import ( vtkBYUReader, vtkOBJReader, vtkSTLReader) from vtkmodules.vtkIOPLY import vtkPLYReader from vtkmodules.vtkIOXML import vtkXMLPolyDataReader from vtkmodules.vtkIOLegacy import vtkPolyDataReader from vtkmodules.vtkRenderingCore import vtkRenderer, vtkRenderWindow, vtkRenderWindowInteractor, vtkLight, vtkPolyDataMapper, vtkActor from vtkmodules.vtkFiltersSources import vtkCubeSource from vtkmodules.vtkRenderingOpenGL2 import vtkShadowMapPass, vtkCameraPass, vtkRenderPassCollection, vtkSequencePass def ReadPolyData(file_name): import os path, extension os.path.splitext(file_name) extension extension.lower() if extension .ply: reader vtkPLYReader() reader.SetFileName(file_name) reader.Update() poly_data reader.GetOutput() elif extension .vtp: reader vtkXMLPolyDataReader() reader.SetFileName(file_name) reader.Update() poly_data reader.GetOutput() elif extension .obj: reader vtkOBJReader() reader.SetFileName(file_name) reader.Update() poly_data reader.GetOutput() elif extension .stl: reader vtkSTLReader() reader.SetFileName(file_name) reader.Update() poly_data reader.GetOutput() elif extension .vtk: reader vtkPolyDataReader() reader.SetFileName(file_name) reader.Update() poly_data reader.GetOutput() elif extension .g: reader vtkBYUReader() reader.SetGeometryFileName(file_name) reader.Update() poly_data reader.GetOutput() else: poly_data None return poly_data def main(): fn Data/cow.g polyData ReadPolyData(fn) colors vtkNamedColors() colors.SetColor(HighNoonSun, [255, 255, 251, 255]) # Color temp. 5400°K colors.SetColor(100W Tungsten, [255, 214, 170, 255]) # Color temp. 2850°K renderer vtkRenderer() renderer.SetBackground(colors.GetColor3d(Silver)) renderWindow vtkRenderWindow() renderWindow.SetSize(640, 480) renderWindow.AddRenderer(renderer) interactor vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) # 添加两束光源 light1 vtkLight() light1.SetPosition(0, 1, 0.2) light1.SetFocalPoint(0, 0, 0) light1.SetColor(colors.GetColor3d(HighNoonSun)) SetIntensity 用来设置光源的亮度或强度 light1.SetIntensity(0.3) renderer.AddLight(light1) light2 vtkLight() light2.SetFocalPoint(0, 0, 0) light2.SetPosition(1.0, 1.0, 1.0) light2.SetColor(colors.GetColor3d(100W Tungsten)) light2.SetIntensity(0.8) renderer.AddLight(light2) mapper vtkPolyDataMapper() mapper.SetInputData(polyData) actor vtkActor() actor.SetMapper(mapper) actor.GetProperty().SetAmbientColor(colors.GetColor3d(SaddleBrown)) actor.GetProperty().SetDiffuseColor(colors.GetColor3d(Sienna)) actor.GetProperty().SetSpecularColor(colors.GetColor3d(White)) actor.GetProperty().SetSpecular(0.51) actor.GetProperty().SetDiffuse(0.7) actor.GetProperty().SetAmbient(0.7) actor.GetProperty().SetSpecularPower(30.0) actor.GetProperty().SetOpacity(1.0) renderer.AddActor(actor) bounds polyData.GetBounds() rnge [0] * 3 rnge[0] bounds[1] - bounds[0] rnge[1] bounds[3] - bounds[2] rnge[2] bounds[5] - bounds[4] expand 1.0 thickness rnge[2] * 0.1 plane vtkCubeSource() plane.SetCenter((bounds[1] bounds[0]) / 2.0, bounds[2] - thickness / 2.0, (bounds[5] bounds[4]) / 2.0) plane.SetXLength(bounds[1] - bounds[0] (rnge[0] * expand)) plane.SetYLength(thickness) plane.SetZLength(bounds[5] - bounds[4] (rnge[2] * expand)) planeMapper vtkPolyDataMapper() planeMapper.SetInputConnection(plane.GetOutputPort()) planeActor vtkActor() planeActor.SetMapper(planeMapper) renderer.AddActor(planeActor) renderWindow.SetMultiSamples(0) vtkShadowMapPass vtk中用于实时阴影渲染的一个类 shadows vtkShadowMapPass() vtkSequencePass 组合型渲染通道,本身不渲染任何内容只是一个容器可以把多个Pass放进去它会一个一个按顺序调用 seq vtkSequencePass() vtkRenderPassCollection 是用来存放和管理多个渲染 PassvtkRenderPass对象的类它经常和 vtkSequencePass 一起使用 主要作用 | 功能 | 说明 | ----------------------- | ---------------------------------- | 存储渲染 Pass | 存放多个 vtkRenderPass 实例 | 顺序访问 | 可以用迭代方式依次取出每个 Pass | 与 vtkSequencePass 协作 | vtkSequencePass 从中读取 Pass 并按顺序执行 | 构建渲染流程 | 常用于定义自定义的渲染顺序 常用方法 方法 | 功能说明 AddItem(vtkRenderPass *pass) 向集合中添加一个渲染 Pass GetNextRenderPass() 依次获取下一个 Pass内部遍历器 InitTraversal() 重置遍历状态准备从头遍历 RemoveAllItems() 清空集合 GetNumberOfItems() 返回当前包含的 Pass 数量 passes vtkRenderPassCollection() 第一个Pass用光源的视角去渲染场景生成每个光源的深度贴图(shadow map),把结果存入GPU纹理 相当于“记录从光的角度看到的深度信息” passes.AddItem(shadows.GetShadowMapBakerPass()) #添加“阴影贴图生成阶段”ShadowMapBakerPass 第二个Pass:切换回主摄像机的视角使用上一步生成的阴影贴图在片元着色时计算每个点是否被遮挡 渲染带阴影的最终画面 passes.AddItem(shadows) # 再添加“阴影渲染阶段”shadows 本身即 vtkShadowMapPass 把定义好的渲染 Pass 集合vtkRenderPassCollection交给 vtkSequencePass让它按顺序执行这些 Pass seq.SetPasses(passes) 下面这段代码的作用是创建一个相机渲染阶段 (vtkCameraPass) 并把你的自定义渲染序列seq即 vtkSequencePass交给它执行 cameraP vtkCameraPass() cameraP.SetDelegatePass(seq) renderer.SetPass(cameraP) 以上的结构关系图 vtkRenderer └── vtkCameraPass (cameraP) └── vtkSequencePass (seq) └── vtkRenderPassCollection (passes) ├── vtkShadowMapBakerPass └── vtkShadowMapPass renderer.GetActiveCamera().SetPosition(-0.2, 0.2, 1) renderer.GetActiveCamera().SetFocalPoint(0, 0, 0) renderer.GetActiveCamera().SetViewUp(0, 1, 0) renderer.ResetCamera() renderer.GetActiveCamera().Dolly(2.25) renderer.ResetCameraClippingRange() renderWindow.SetWindowName(Shadows) renderWindow.Render() renderWindow.SetWindowName(Shadows) interactor.Start() render本身会按照标准流程绘制场景 设置相机 绘制背景 绘制演员 绘制灯光阴影 显示结果。 当调用了SetPass时相当于自定义了以上的渲染流程流程就变成了下面的顺序 Renderer.Render() → 调用 cameraP.Render() → cameraP 设置相机镜头 → 调用 seq.Render() → 按顺序执行 passes ShadowMapBakerPass生成阴影 ShadowMapPass渲染场景 if __name__ __main__: main()

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询