当前位置: 首页 > news >正文

3.vtkProp 和vtkProp3D

文章目录

  • vtkProp 和vtkProp3D
  • 使用vtkProp3D
  • 使用vtkPro

vtkProp 和vtkProp3D

vtkProp 和 vtkProp3D 都是VTK(Visualization Toolkit)库中的类,它们用于在渲染场景中表示可视化元素。理解这两个类的区别和用途对于有效地使用VTK进行三维数据可视化非常重要。
vtkProp: 这是一个抽象类,它定义了所有可视对象的基本属性和行为。vtkProp 是任何可以被放置到渲染器(vtkRenderer)中的对象的基类。这些对象包括几何体、注释、2D覆盖等。简而言之,vtkProp 是一个能够在渲染窗口中显示的对象。
vtkProp3D: 这个类是 vtkProp 的直接子类之一,专门用于表示三维空间中的对象。vtkProp3D 提供了位置、方向、缩放等属性的控制方法,允许用户对三维对象进行精确的操作。例如,你可以通过设置变换矩阵来移动、旋转或缩放一个 vtkProp3D 对象。

具体来说,如果你有一个需要在三维空间内进行变换(如移动、旋转)的对象,你可能会使用 vtkProp3D 或其派生类(如
vtkActor)。而 vtkProp 则更为通用,适用于不需要进行三维变换的场景,比如一些2D覆盖或者文本标注。

在实际应用中,最常用的是 vtkProp3D 的派生类,比如 vtkActor,它代表了一个带有几何数据(由 vtkMapper
映射的数据)、属性(颜色、透明度等)、变换(位置、方向、缩放)的实体,可以在三维空间中被渲染。

使用vtkProp3D

#include <iostream>
#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkCylinderSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkAutoInit.h>
#include <vtkSphereSource.h>
#include <vtkLineSource.h>
#include <vtkPlaneSource.h>

VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);



int main() {
    // 1. 创建一个球体的几何数据源
    vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();
    sphereSource->SetCenter(0.0, 0.0, 0.0);  // 设置球体中心
    sphereSource->SetRadius(1.0);            // 设置球体半径

    // 2. 创建一个映射器 (Mapper)
    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputConnection(sphereSource->GetOutputPort());

    // 3. 创建一个演员 (Actor)
    vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);

    // 使用 vtkProp3D 的方法设置位置、旋转和缩放
    actor->SetPosition(0.0, 0.0, 0.0);       // 设置位置
    actor->RotateX(45.0);                    // 绕 X 轴旋转 45 度
    actor->RotateY(30.0);                    // 绕 Y 轴旋转 30 度
    actor->SetScale(1.5, 1.5, 1.5);          // 缩放比例

    // 4. 创建一个渲染器 (Renderer)
    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
    renderer->AddActor(actor);                // 将演员添加到渲染器中
    renderer->SetBackground(0.1, 0.2, 0.4);   // 设置背景颜色 (RGB)

    // 5. 创建一个渲染窗口 (Render Window)
    vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->AddRenderer(renderer);
    renderWindow->SetSize(800, 600);         // 设置窗口大小

    // 6. 创建一个交互器 (Interactor)
    vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    interactor->SetRenderWindow(renderWindow);

    // 7. 初始化交互器并启动渲染循环
    renderWindow->Render();
    interactor->Start();

    return 0;
}

在这里插入图片描述

使用vtkPro

#include <iostream>
#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkSphereSource.h>
#include <vtkAutoInit.h>

VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);

int main() {
    // 1. 创建一个球体的几何数据源
    vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();
    sphereSource->SetCenter(0.0, 0.0, 0.0);  // 设置球体中心
    sphereSource->SetRadius(1.0);            // 设置球体半径

    // 2. 创建一个映射器 (Mapper)
    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputConnection(sphereSource->GetOutputPort());

    // 3. 创建一个演员 (Actor)
    vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);

    // 使用 vtkProp3D 的方法设置位置、旋转和缩放
    actor->SetPosition(0.0, 0.0, 0.0);       // 设置位置
    actor->RotateX(45.0);                    // 绕 X 轴旋转 45 度
    actor->RotateY(30.0);                    // 绕 Y 轴旋转 30 度
    actor->SetScale(1.5, 1.5, 1.5);          // 缩放比例

    // 4. 将 vtkActor 转换为 vtkProp 类型
    vtkProp* prop = actor;  // vtkActor 是 vtkProp 的子类,因此可以向上转型

    // 5. 创建一个渲染器 (Renderer)
    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
    renderer->AddActor(actor);                // 将演员添加到渲染器中
    renderer->SetBackground(0.1, 0.2, 0.4);   // 设置背景颜色 (RGB)

    // 6. 创建一个渲染窗口 (Render Window)
    vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->AddRenderer(renderer);
    renderWindow->SetSize(800, 600);         // 设置窗口大小

    // 7. 创建一个交互器 (Interactor)
    vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    interactor->SetRenderWindow(renderWindow);

    // 8. 初始化交互器并启动渲染循环
    renderWindow->Render();
    interactor->Start();

    return 0;
}

相关文章:

  • 三维物体消隐处理
  • numpy.ma.masked_where:屏蔽满足条件的数组
  • 企业数字化转型深度解析:政策驱动、核心要素、技术路径、实战策略与未来趋势
  • Sql Server(自用查看版)
  • 电路图通用设计规范
  • 串口通信简述
  • 系统监控 | 简易多个内网服务器的CPU和内存使用率监控 system_moniter
  • cryptozombies合约7
  • KF V.S. GM-PHD
  • 《Operating System Concepts》阅读笔记:p636-p666
  • OTA技术(一):原理与实现方案
  • AI日报 - 2025年4月13日
  • C++ 标准库中的 <algorithm> 头文件算法总结
  • 【C++】前向声明(Forward Declaration)
  • Interaction Toolkit 新版模拟器快捷键
  • [NOIP 2003 普及组] 栈 Java
  • OSM路网简化文档+实操视频讲解(道路中心线提取、拓扑检查,学术论文处理方式)11
  • 基于kitti格式纯点云数据的centerpoint目标检测模型的转换(.pth转.onnx和.plan,更新中)
  • SpringBoot日志
  • 代码训练day25回溯p4
  • 独家丨远洋渔船船长被害案嫌犯移送检方报捕,船上两段视频曝光
  • 明查|俄罗斯征兵部门突袭澡堂抓捕壮丁?
  • 人民日报和音:书写周边命运共同体建设新篇章
  • 韩国一战机飞行训练中掉落机炮吊舱和空油箱
  • 重庆警方通报“货车轮胎滚进服务区致人死亡”:正进一步调查
  • 北京:义务教育阶段入学将积极为多孩家庭长幼随学创造条件