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

(31)VTK C++开发示例 ---绘制立方体

文章目录

    • 1. 概述
    • 2. CMake链接VTK
    • 3. main.cpp文件
    • 4. 演示效果


更多精彩内容
👉内容导航 👈
👉VTK开发 👈

1. 概述

使用VTK(Visualization Toolkit)库创建并显示3D立方体的C++程序,演示了 VTK 管道用法,不需要手动创建数据点。

核心功能

  • 创建了一个黄色立方体,并显示在灰色背景的3D渲染窗口中
  • 支持窗口交互操作(旋转/缩放等)
  • 窗口初始大小为600x600像素
  • 相机初始方位角为30度(Azimuth)和仰角30度(Elevation)

关键VTK类

类名作用
vtkCubeSource生成立方体几何数据
vtkPolyDataMapper将几何数据映射为可渲染的图形数据
vtkActor控制物体外观(颜色/纹理等)
vtkRenderer管理场景中的对象和光照
vtkRenderWindow显示3D场景的窗口
vtkRenderWindowInteractor处理用户交互事件

工作流程

  1. 初始化颜色库(vtkNamedColors)
  2. 创建渲染管线:数据源→映射器→演员
  3. 配置渲染窗口及交互器
  4. 设置相机视角和场景参数
  5. 启动渲染循环
环境说明
系统ubuntu22.04、windows11
cmake3.22、3.25
Qt5.14.2
编译器g++11.4、msvc2017
VTK9.4.1

2. CMake链接VTK

cmake_minimum_required(VERSION 3.20 FATAL_ERROR) # 设置CMake最低版本
project(vtk2) # 设置项目名称
# 查找VTK库
find_package(VTK COMPONENTS 
CommonColor
CommonCore
FiltersSources
InteractionStyle
RenderingContextOpenGL2
RenderingCore
RenderingFreeType
RenderingGL2PSOpenGL2
RenderingOpenGL2
)
if(NOT VTK_FOUND)
message("VTK not found")
return()
endif()add_executable(vtk2 main.cpp) # 添加可执行文件target_link_libraries(vtk2 PRIVATE ${VTK_LIBRARIES}) # 链接VTK库
vtk_module_autoinit(TARGETS vtk2 MODULES ${VTK_LIBRARIES}) # 初始化VTK模块

3. main.cpp文件

/********************************************************************************
* 文件名:   main.cpp
* 创建时间: 2025-03-21 21:40:28
* 开发者:   MHF
* 邮箱:     1603291350@qq.com
* 功能:     
*********************************************************************************/
#include<iostream>
#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkCubeSource.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>using namespace std;int main()
{vtkNew<vtkNamedColors> colors;vtkNew<vtkRenderer> renderer; //渲染器vtkNew<vtkRenderWindow> renderWindow; //渲染窗口renderWindow->AddRenderer(renderer);vtkNew<vtkRenderWindowInteractor> iren; //渲染窗口交互器iren->SetRenderWindow(renderWindow);vtkNew<vtkCubeSource> cube; //创建一个立方体cube->Update(); //更新立方体vtkNew<vtkPolyDataMapper> mapper; //创建一个映射器mapper->SetInputConnection(cube->GetOutputPort()); //设置映射器输入vtkNew<vtkActor> actor; //创建一个演员actor->SetMapper(mapper); //设置演员映射器actor->GetProperty()->SetColor(colors->GetColor3d("Banana").GetData()); //设置演员颜色renderer->AddActor(actor); //添加演员renderer->SetBackground(colors->GetColor3d("SlateGray").GetData()); //设置背景颜色renderer->ResetCamera(); //重置相机renderer->GetActiveCamera()->Azimuth(30); //设置相机方位角renderer->GetActiveCamera()->Elevation(30); //设置相机仰角renderer->ResetCameraClippingRange(); //重置相机裁剪范围renderWindow->SetSize(600, 600); //设置窗口大小renderWindow->Render(); //渲染窗口iren->Start(); //开始交互器事件循环return 0;
}

4. 演示效果

在这里插入图片描述



http://www.xdnf.cn/news/234487.html

相关文章:

  • 第 12 届蓝桥杯 C++ 青少组中 / 高级组省赛 2021 年 4 月 24 日真题
  • C++好用的打印日志类
  • 2025.4.24 JavaScript 基础学习笔记
  • [特殊字符] 蓝桥杯省赛全解析:含金量、获奖难度、参赛意义与发展价值全面剖析
  • 精华贴分享|【零敲碎打12】类筹码数据构建-散户行为倾向
  • react初学踏坑记录-if(number)到底过滤了什么
  • leetcode0075. 颜色分类-medium
  • 数学:拉马努金如何想出计算圆周率的公式?
  • 大连理工大学选修课——机器学习笔记(3):KNN原理及应用
  • 【中间件】bthread效率为什么高?
  • 12.Three.js 中的 DirectionalLight(平行光)详解指南
  • Python第四周作业
  • 软件系统验收报告:功能、性能稳定性如何?数据导出卡顿咋回事?
  • SpringBoot使用Mybatis-Plus分页无效
  • 云蝠智能大模型呼叫,音色升级啦!
  • 这些是什么充电模块调试手段,对USB、Thermal、DP
  • 【Agent】MCP协议 | 用高德MCP Server制作旅游攻略
  • Compose Multiplatform+Kotlin Multiplatfrom 第六弹跨平台 AI应用
  • 大屏/门户页面兼容各种分辨率或电脑缩放
  • C++初阶-string类1
  • 手动实现二叉搜索树
  • AGI时代来临?2030年AI将如何改变人类社会?
  • Spark SQL 之 DAG
  • Linux容器大师:K8s集群部署入门指南
  • 校平机:金属板材加工的核心设备
  • 1295. 统计位数为偶数的数字
  • 大小写问题
  • 5.运输层
  • 解决在Mac上无法使用“ll”命令
  • python与c++变量赋值的区别