(1)VTK主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建。VTK是基于OpenGL实现的,是一个比较上层的图形库;
(2)OpenGL是跨平台的图形程序接口,它用于二维,三维图像的处理,调用方便的底层图形库。但是OpenGL读入二维图片作为纹理图比较繁琐,没有提供直接的接口;
VTK实现纹理贴图,比OpenGL实现纹理贴图要方便,快速。
具体代码实现如下,可以选择渲染圆柱体或者球体:
注明:该代码参考东灵工作室博文,http://blog.csdn.net/www_doling_net/article/list/2 。
#include "vtkSmartPointer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include "vtkCylinderSource.h"
#include "vtkSphereSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkBMPReader.h"
#include "vtkJPEGReader.h"
#include "vtkTexture.h"
int main(int argc, char* argv[])
{
//对圆柱体渲染
vtkSmartPointer<vtkCylinderSource> cylinder =
vtkSmartPointer<vtkCylinderSource>::New();
cylinder->SetHeight( 3.0 );
cylinder->SetRadius( 1.0 );
cylinder->SetResolution( 10 );
//对球体渲染
/* vtkSmartPointer<vtkSphereSource> sphere =
vtkSmartPointer<vtkSphereSource>::New();
sphere->SetRadius(2.0);
sphere->SetThetaResolution(20);
sphere->SetPhiResolution(20);*/
vtkSmartPointer<vtkJPEGReader>bmpReader = vtkSmartPointer<vtkJPEGReader>::New();
bmpReader->SetFileName("F:/qt/project_try/imageProcess_3/data/2D/MICCAI2015.jpg");//读入纹理图
vtkSmartPointer<vtkTexture>texture = vtkSmartPointer<vtkTexture>::New();
texture->SetInputConnection(bmpReader->GetOutputPort());
texture->InterpolateOn();
vtkSmartPointer<vtkPolyDataMapper> cylinderMapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
cylinderMapper->SetInputConnection( cylinder->GetOutputPort() );
//cylinderMapper->SetInputConnection( sphere->GetOutputPort() );//对球体渲染
vtkSmartPointer<vtkActor> cylinderActor =
vtkSmartPointer<vtkActor>::New();
cylinderActor->SetMapper( cylinderMapper );
cylinderActor->SetTexture(texture);//纹理为actor的一种属性
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor( cylinderActor );
renderer->SetBackground( 0.1, 0.2, 0.4 );
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;
}
程序效果图如下: