上面的文章链接很好的讲述了VTk中基本的一些类库。
下面我就来摘抄一下其中重要的部分。
当我们去看舞台剧的时候,我们坐在台下,展现在我们面前的是一个舞台,舞台上有各式的灯光,各样的演员。演员出场的时候肯定是会先化妆,有些演员可能会打扮成高富帅,有些演员可能会化妆成白富美。观众有时还会与台上的演员有一定的互动。
整个剧院就好比VTK程序的渲染窗口(vtkRenderWindow);舞台就相当于渲染场景(vtkRenderer);而那些高富帅、白富美就是我们程序中的Actor(有些文献翻译成“演员”,有些翻译成“角色”,这里我们不作翻译);台上的演员与台下观众的互动可以看成是程序的交互(vtkRenderWindowInteractor);演员与观众的互动方式有很多种,现场的观众可以直接上台跟演员们握手拥抱,电视机前的可以发短信,电脑、移动终端用户等可以微博关注、加粉等等,这就好比我们程序里的交互器样式(vtkInteractorStyle);舞台上的演员我们都能一一分辨出来,不会把高富帅弄混淆,是因为他们化的妆、穿的服饰都不一样,这就相当于我们程序里vtkActor的不同属性(vtkProperty);台下观众的眼睛可以看作是vtkCamera,前排的观众因为离得近,看台上演员会显得比较高大,而后排的观众看到的会显得小点,每个观众看到的东西在他的世界里都是唯一的,所以渲染场景Renderer里的vtkCamera对象也是只有一个;舞台上的灯光可以有多个,所以渲染场景里的vtkLight也存在多个。可以参考一下图3.2,加深理解。
注:此文章部分截取与CSDN东灵工作室
下面就是对这些代码的理解
#include "vtkSmartPointer.h"
#include "vtkRenderWindow.h" // stadium
#include "vtkRenderer.h" // stage
#include "vtkActor.h" // actor
#include "vtkCylinderSource.h" // cylinder
#include "vtkPolyDataMapper.h" // data type
#include "vtkRenderWindowInteractor.h" // interactor
#include "vtkInteractorStyleTrackballCamera.h" //interactor style
int main(){
//generate cylinder object
vtkSmartPointer <vtkCylinderSource> cylinder = vtkSmartPointer <vtkCylinderSource>::New();
cylinder->SetHeight(4.0);
cylinder->SetRadius(4.0);
cylinder->SetResolution(10);
// draw contours of cylinder
vtkSmartPointer <vtkPolyDataMapper> cylinderMapper = vtkSmartPointer <vtkPolyDataMapper>::New();
cylinderMapper->SetInputConnection(cylinder->GetOutputPort());
// generate Actor
vtkSmartPointer <vtkActor> cylinderActor = vtkSmartPointer <vtkActor>::New();
cylinderActor->SetMapper(cylinderMapper);
// depict the stage
vtkSmartPointer <vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->SetBackground(0.4, 0.3, 0.2);
renderer->AddActor(cylinderActor);
// add stage to stadium
vtkSmartPointer <vtkRenderWindow> reWin = vtkSmartPointer<vtkRenderWindow>::New();
reWin->AddRenderer(renderer);
// set the interactor
vtkSmartPointer <vtkRenderWindowInteractor> iren = vtkSmartPointer <vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(reWin);
// set the interactor style
vtkSmartPointer <vtkInteractorStyleTrackballCamera> style = vtkSmartPointer <vtkInteractorStyleTrackballCamera>::New();
iren->SetInteractorStyle(style);
// get the iren
iren->Initialize();
// start the project
iren->Start();
return 0;
}
CMake
cmake_minimum_required (VERSION 2.8)
project (RenderCylinder)
find_package(VTK REQUIRED)
include(${VTK_USE_FILE})
add_executable(RenderCylinder RenderCylinder.cpp)
target_link_libraries(RenderCylinder vtkRendering vtkCommon)