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

发布于:2025-05-01 ⋅ 阅读:(92) ⋅ 点赞:(0)


更多精彩内容
👉内容导航 👈
👉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
cmake 3.22、3.25
Qt 5.14.2
编译器 g++11.4、msvc2017
VTK 9.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. 演示效果

在这里插入图片描述




网站公告

今日签到

点亮在社区的每一天
去签到