VTK在同一窗口中同时显示多个渲染结果

vtk学习视频

前几个月看的发现又忘了,还是记录一下吧

        vtkConeSource cone = new vtkConeSource();  
        //设置圆锥的高度和半径  
        cone.SetHeight(3);  
        cone.SetRadius(1);  
        //设置分辨率,值越大,越趋近于圆锥体  
        cone.SetResolution(10);  
          
        vtkCubeSource cube = new vtkCubeSource();  
        //设置立方体的长宽高  
        cube.SetXLength(1);  
        cube.SetYLength(1.5);  
        cube.SetZLength(1);  
          
        //创建圆柱体  
        vtkCylinderSource cylinder = new vtkCylinderSource();  
        //创建平面  
        vtkPlaneSource plane = new vtkPlaneSource();  
        //创建对应的mapper  
        vtkPolyDataMapper coneMapper = new vtkPolyDataMapper();  
        coneMapper.SetInputConnection(cone.GetOutputPort());  
          
        vtkPolyDataMapper cubeMapper = new vtkPolyDataMapper();  
        cubeMapper.SetInput(cube.GetOutput());  
          
        vtkPolyDataMapper cylinderMapper = new vtkPolyDataMapper();  
        cylinderMapper.SetInput(cylinder.GetOutput());  
          
        vtkPolyDataMapper planeMapper = new vtkPolyDataMapper();  
        planeMapper.SetInput(plane.GetOutput());  
        //创建对应的actor,设置mapper  
        vtkActor coneActor = new vtkActor();  
        coneActor.SetMapper(coneMapper);  
          
        vtkActor cubeActor = new vtkActor();  
        cubeActor.SetMapper(cubeMapper);  
          
        vtkActor cylinderActor = new vtkActor();  
        cylinderActor.SetMapper(cylinderMapper);  
          
        vtkActor planeActor = new vtkActor();  
        planeActor.SetMapper(planeMapper);  
        //针对每个actor创建一个vtkRender,添加actor  
        vtkRenderer ren1 = new vtkRenderer();  
        ren1.AddActor(coneActor);  
        //下面的代码就是设置视口的,将屏幕分为4个视口  
        //前两个参数是视口左下角点的坐标(xmin,ymin),后两个参数是右上角的坐标(xmax,ymax)  
        ren1.SetViewport(0, 0.5, 0.5, 1);  
        ren1.SetBackground(0.1, 0.2, 0.4);  
          
        vtkRenderer ren2 = new vtkRenderer();  
        ren2.AddActor(cubeActor);  
        ren2.SetViewport(0.5, 0.5, 1, 1);  
        ren2.SetBackground(0, 1, 0);  
          
        vtkRenderer ren3 = new vtkRenderer();  
        ren3.AddActor(cylinderActor);  
        ren3.SetViewport(0, 0, 0.5, 0.5);  
          
        vtkRenderer ren4 = new vtkRenderer();  
        ren4.AddActor(planeActor);  
        ren4.SetViewport(0.5 , 0, 1, 0.5);  
        ren4.SetBackground(0, 0, 1);  
          
        vtkRenderWindow renWin = new vtkRenderWindow();  
        renWin.AddRenderer(ren1);  
        renWin.AddRenderer(ren2);  
        renWin.AddRenderer(ren3);  
        renWin.AddRenderer(ren4);  
        renWin.SetSize(500, 400);  
          
        //添加鼠标交互  
        vtkRenderWindowInteractor interactor = new vtkRenderWindowInteractor();  
        interactor.SetRenderWindow(renWin);  
        vtkInteractorStyleTrackballActor style = new vtkInteractorStyleTrackballActor();  
        interactor.SetInteractorStyle(style);  
        //初始化交互器 并开始执行事件循环  
        interactor.Initialize();  
        interactor.Start();  
    
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,加载 3 个模型在同一窗口但不同坐标系统显示可以通过以下步骤实现: 1. 导入 vtk 库和相关模块 ```python import vtk from vtk.util.colors import tomato, banana, blueberry ``` 2. 创建 3 个 vtkRenderer 对象和 1 个 vtkRenderWindow 对象 ```python # 创建 3 个 Renderer 对象 ren1 = vtk.vtkRenderer() ren2 = vtk.vtkRenderer() ren3 = vtk.vtkRenderer() # 创建一个 RenderWindow 对象 renWin = vtk.vtkRenderWindow() # 将每个 Renderer 对象分别加入 RenderWindow 对象 renWin.AddRenderer(ren1) renWin.AddRenderer(ren2) renWin.AddRenderer(ren3) # 设置每个 Renderer 对象的坐标系统 ren1.GetActiveCamera().SetPosition(0, 0, 0) ren1.GetActiveCamera().SetFocalPoint(1, 0, 0) ren1.GetActiveCamera().SetViewUp(0, 0, 1) ren1.ResetCamera() ren1.ResetCameraClippingRange() ren2.GetActiveCamera().SetPosition(0, 0, 0) ren2.GetActiveCamera().SetFocalPoint(0, 1, 0) ren2.GetActiveCamera().SetViewUp(0, 0, 1) ren2.ResetCamera() ren2.ResetCameraClippingRange() ren3.GetActiveCamera().SetPosition(0, 0, 0) ren3.GetActiveCamera().SetFocalPoint(0, 0, 1) ren3.GetActiveCamera().SetViewUp(0, 1, 0) ren3.ResetCamera() ren3.ResetCameraClippingRange() ``` 3. 加载 3 个模型文件 ```python # 加载 3 个模型文件 reader1 = vtk.vtkSTLReader() reader1.SetFileName('model1.stl') reader2 = vtk.vtkSTLReader() reader2.SetFileName('model2.stl') reader3 = vtk.vtkSTLReader() reader3.SetFileName('model3.stl') ``` 4. 创建 3 个 vtkActor 对象,并设置每个 Actor 对象的属性 ```python # 创建 3 个 vtkActor 对象 actor1 = vtk.vtkActor() actor2 = vtk.vtkActor() actor3 = vtk.vtkActor() # 设置每个 Actor 对象的属性,如颜色和位置等 actor1.SetMapper(mapper1) actor1.GetProperty().SetColor(tomato) actor1.SetPosition(0, 0, 0) actor2.SetMapper(mapper2) actor2.GetProperty().SetColor(banana) actor2.SetPosition(1, 0, 0) actor3.SetMapper(mapper3) actor3.GetProperty().SetColor(blueberry) actor3.SetPosition(0, 1, 0) ``` 5. 将每个 Actor 对象添加到对应的 Renderer 对象,并启动窗口渲染 ```python # 将每个 Actor 对象添加到对应的 Renderer 对象 ren1.AddActor(actor1) ren2.AddActor(actor2) ren3.AddActor(actor3) # 启动窗口渲染 renWin.SetSize(600, 600) renWin.Render() ``` 以上就是加载 3 个模型在同一窗口但不同坐标系统显示的基本步骤,你可以根据自己的需求对代码进行一些修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值