参考书:张晓东, 罗火灵. VTK图形图像开发进阶[M]. 机械工业出版社, 2015.
可交互的VTK应用程序
新建CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.3 FATAL_ERROR)
project(chap02)
find_package(VTK REQUIRED)
if (NOT VTK_FOUND)
message("Skipping chap02: ${VTK_NOT_FOUND_MESSAGE}")
return ()
endif()
message (STATUS "VTK_VERSION: ${VTK_VERSION}")
if (VTK_VERSION VERSION_LESS "8.90.0")
# old system
include(${VTK_USE_FILE})
add_executable(RenderCylinder02 MACOSX_BUNDLE RenderCylinder02.cxx )
target_link_libraries(RenderCylinder02 PRIVATE ${VTK_LIBRARIES})
else ()
# include all components
add_executable(RenderCylinder02 MACOSX_BUNDLE RenderCylinder02.cxx )
target_link_libraries(RenderCylinder02 PRIVATE ${VTK_LIBRARIES})
# vtk_module_autoinit is needed
vtk_module_autoinit(
TARGETS RenderCylinder02
MODULES ${VTK_LIBRARIES}
)
endif ()
RenderCylinder02.cxx文件:
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>//绘制窗口
#include <vtkRenderer.h>//绘制器
#include <vtkRenderWindowInteractor.h>//交互
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkCylinderSource.h> //生成一个中心在渲染场景原点的柱体的类
#include <vtkPolyDataMapper.h> //用于渲染多边形几何数据,将输入的数据转换为几何图元(点、线、多边形)进行渲染。数据映射
#include <vtkActor.h>//演员
int main()
{
vtkSmartPointer<vtkCylinderSource>cylinder =
vtkSmartPointer<vtkCylinderSource>::New();
cylinder->SetHeight(3.0);//设置柱体的高
cylinder->SetRadius(1.0);//设置柱体横截面半径
cylinder->SetResolution(6);//设置柱体横截面的等边多边形的边数
vtkSmartPointer<vtkPolyDataMapper>cylinderMapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
cylinderMapper->SetInputConnection(cylinder->GetOutputPort());
vtkSmartPointer<vtkActor>cylinderActor =
vtkSmartPointer<vtkActor>::New();
cylinderActor->SetMapper(cylinderMapper);
vtkSmartPointer<vtkRenderer>renderer =
vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(cylinderActor);//添加渲染场景
renderer->SetBackground(0.1,0.2,0.4);//设置渲染场景背景颜色(R、G、B),(0.0,0.0,0.0)为黑色;(1.0,1.0,1.0)为白色
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();//等待用户交互事件发生
return 0;
}
灯光:
vtkSmartPointer<vtkLight>myLight =
vtkSmartPointer<vtkLight>::New();
myLight->SetColor(0, 1, 0);
myLight->SetPosition(0, 0, 1);
renderer->AddLight(myLight);