ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

VTK学习

2021-10-06 11:34:23  阅读:160  来源: 互联网

标签:vtkSmartPointer 渲染 VTK 学习 cylinderActor New include


参考链接:

https://kitware.github.io/vtk-examples/site/Cxx/
https://blog.csdn.net/www_doling_net/article/details/8763686

Example1

  • CMakeLists.txt
cmake_minimum_required(VERSION 2.8)

project(TestVTKInstall)

set(VTK_DIR D:/VTK/VTK-8.2.0-build)
find_package(VTK REQUIRED)
message(${VTK_LIBRARIES})

include(${VTK_USE_FILE})

add_executable(${PROJECT_NAME} TestVTKInstall.cpp)
target_link_libraries(${PROJECT_NAME} ${VTK_LIBRARIES})
  • TestVTKInstall.cpp
#include "vtkRenderWindow.h"
#include "vtkSmartPointer.h"

int main(){
	// 智能指针定义一个窗口
	vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
	renWin->Render();  // 显示并渲染窗口
	
	std::cin.get();
	return 0;
}

Example2

  • CMakeLists
cmake_minimum_required(VERSION 2.8)

project(RenderCylinder)

set(VTK_DIR D:/VTK/VTK-8.2.0-build)
find_package(VTK REQUIRED)
message(${VTK_LIBRARIES})

include(${VTK_USE_FILE})

add_executable(${PROJECT_NAME} RenderCylinder.cpp)
target_link_libraries(${PROJECT_NAME} ${VTK_LIBRARIES})
  • RenderCylinder.cpp
#include "vtkRenderWindow.h"
#include "vtkSmartPointer.h"
#include "vtkRenderer.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include "vtkCylinderSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkProperty.h"
#include "vtkJPEGReader.h"
#include "vtkTexture.h"


int main(){
	// 派生自vtkPolyDataAlgorithm, 生成一个中心在渲染场景原点的柱体,长轴沿着Y轴
	vtkSmartPointer<vtkCylinderSource> cylinder = vtkSmartPointer<vtkCylinderSource>::New();
	cylinder->SetHeight(3.0);         // 设置柱体高度 
	cylinder->SetRadius(1.0);         // 设置柱体横截面半径
	cylinder->SetResolution(10);      // 设置柱体横截面的等边多边形的边数
	
	// 派生自vtkMapper 渲染多边形几何数据, 将输入的数据转换为几何图元(点、线、多边形)进行渲染
	vtkSmartPointer<vtkPolyDataMapper> cylinderMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
	cylinderMapper->SetInputConnection(cylinder->GetOutputPort());   // VTK可视化管线的输入数据接口

	// 加入文理贴图
	vtkSmartPointer<vtkJPEGReader> jpegReader = vtkSmartPointer<vtkJPEGReader>::New();
	jpegReader->SetFileName("./texture1.jpg");
	vtkSmartPointer<vtkTexture> texture = vtkSmartPointer<vtkTexture>::New();
	texture->SetInputConnection(jpegReader->GetOutputPort());
	texture->InterpolateOn();

	// 派生自vtkProp, 负责渲染场景中数据的可视化(位置 大小及方向信息), 3维空间离常用vtkActor(几何数据), vtkVolume(体数据), 2维空间用vtkActor2D
	// 依赖于vtkMapper(负责存放数据和渲染信息) 和 vtkProperty(负责控制颜色、透明度等参数)
	vtkSmartPointer<vtkActor> cylinderActor = vtkSmartPointer<vtkActor>::New();
	cylinderActor->SetMapper(cylinderMapper);
	cylinderActor->SetTexture(texture);
	
	//// 方式一 设置property属性 
	//cylinderActor->GetProperty()->SetColor(1.0, 0.0, 0.0);   // 设置property属性
	//// 方式二 设置property属性
	//vtkSmartPointer<vtkProperty> cylinderProperty = vtkSmartPointer<vtkProperty>::New();
	//cylinderProperty->SetColor(1.0, 0.0, 0.0);
	//cylinderActor->SetProperty(cylinderProperty);

	
	// 负责管理场景的渲染过程,组成场景中所有对象 包括Prop, Camera, Light等
	vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
	renderer->AddActor(cylinderActor);
	renderer->SetBackground(0.1, 0.2, 0.4);  // SetBackground2()用于设置渐变色,需要先打开SetGradientBackground(bool)
	
	// 将操作系统与VTK渲染连接到一起
	vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
	renWin->AddRenderer(renderer);
	renWin->SetSize(300, 300);  // 窗口大小 像素为单位
	
	// 提供平台独立的响应鼠标 键盘 和 时钟事件的交互机制
	vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
	iren->SetRenderWindow(renWin);  // 设置渲染窗口
	
	// 交互器样式的一种
	vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
	iren->SetInteractorStyle(style);  // 定义交互器样式
	 
	iren->Initialize();               // 为处理窗口事件做准备
	iren->Start();                    // 开始进入事件响应循环
	
	std::cin.get();
	return 0;
}

可视化管线

效果

标签:vtkSmartPointer,渲染,VTK,学习,cylinderActor,New,include
来源: https://www.cnblogs.com/xiaxuexiaoab/p/14951613.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有