您的位置:首页 > 其它

VTK实现纹理贴图

2015-06-25 23:07 633 查看
(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;
}


程序效果图如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: