vtk同一窗口中多个Renderer(渲染多个场景)示例

本文展示如何使用 VTK 8.2.0 版本在 Windows10 平台上创建并渲染包括圆锥、立方体、圆柱和平面在内的基本三维图形。通过设置不同的视口和背景颜色,实现了在一个窗口中同时显示多个图形的效果,并提供了鼠标交互功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 vtk版本: 8.2.0

平台:Windows 10


#include <vtkNew.h>
#include <vtkConeSource.h>
#include <vtkRenderWindow.h>
#include <vtkCubeSource.h>
#include <vtkCylinderSource.h>
#include <vtkPlaneSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballActor.h>

#include <ImportLibVTK8_2_0.h>
#include <AutoInitVTKModules.h>

int main()
{
    // 创建圆锥数据
    vtkNew<vtkConeSource> cone;
    cone->SetHeight(20);         //设置圆锥的高度和半径  
    cone->SetRadius(20);  
    cone->SetResolution(100);    //设置分辨率,值越大,越趋近于圆锥体
    //创建对应的mapper 
    vtkNew<vtkPolyDataMapper> coneMapper;
    coneMapper->SetInputConnection(cone->GetOutputPort());
    // 创建对应的Actor
    vtkNew<vtkActor> coneActor;
    coneActor->SetMapper(coneMapper);
    // 针对每个actor创建一个vtkRender,添加actor 
    vtkNew<vtkRenderer> coneRenderer;
    coneRenderer->AddActor(coneActor);
    //下面的代码就是设置视口的,将屏幕分为4个视口  
    //前两个参数是视口左下角点的坐标(xmin,ymin),后两个参数是右上角的坐标(xmax,ymax)  
    coneRenderer->SetViewport(0, 0.5, 0.5, 1);
    coneRenderer->SetBackground(0.1, 0.2, 0.4);

    // 创建立方体
    vtkNew<vtkCubeSource> cube;
    cube->SetXLength(40);     //设置立方体的长宽高  
    cube->SetYLength(50);
    cube->SetZLength(60);
    vtkNew<vtkPolyDataMapper> cubeMapper;
    cubeMapper->SetInputConnection(cube->GetOutputPort());
    vtkNew<vtkActor> cubeActor;
    cubeActor->SetMapper(cubeMapper);
    vtkNew<vtkRenderer> cubeRenderer;
    cubeRenderer->AddActor(cubeActor);
    cubeRenderer->SetViewport(0.5, 0.5, 1, 1);
    cubeRenderer->SetBackground(0, 1, 0);

    //创建圆柱体  
    vtkNew<vtkCylinderSource> cylinder;
    vtkNew<vtkPolyDataMapper> cylinderMapper;
    cylinderMapper->SetInputConnection(cylinder->GetOutputPort());
    vtkNew<vtkActor> cylinderActor;
    cylinderActor->SetMapper(cylinderMapper);
    vtkNew<vtkRenderer> cylinderRenderer;
    cylinderRenderer->AddActor(cylinderActor);
    cylinderRenderer->SetViewport(0, 0, 0.5, 0.5);

    //创建平面  
    vtkNew<vtkPlaneSource> plane;
    vtkNew<vtkPolyDataMapper> planeMapper;
    planeMapper->SetInputConnection(plane->GetOutputPort());
    vtkNew<vtkActor> planeActor;
    planeActor->SetMapper(planeMapper);
    vtkNew<vtkRenderer> planeRenderer;
    planeRenderer->AddActor(planeActor);
    planeRenderer->SetViewport(0.5, 0, 1, 0.5);
    planeRenderer->SetBackground(0, 0, 1);

    vtkNew<vtkRenderWindow> renderWindow;
    renderWindow->AddRenderer(coneRenderer);
    renderWindow->AddRenderer(cubeRenderer);
    renderWindow->AddRenderer(cylinderRenderer);
    renderWindow->AddRenderer(planeRenderer);
    renderWindow->SetSize(800, 600);
    renderWindow->Render();

    //添加鼠标交互  
    vtkNew<vtkRenderWindowInteractor> interactor;
    interactor->SetRenderWindow(renderWindow);
    vtkNew<vtkInteractorStyleTrackballActor> style;
    interactor->SetInteractorStyle(style);

    //初始化交互器 并开始执行事件循环  
    interactor->Initialize();
    interactor->Start();

}

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值