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 。
程序效果图如下:
(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; }
程序效果图如下:
相关文章推荐
- myeclipse2015大杂烩
- HBase无法连接ZooKeeper问题
- 《webgl入门指南》学习笔记一three.js与sim.js
- 集合3
- 简易计算器(Java)
- 原来java中也有类似goto语句的标签啊--java label标签
- 简洁jQuery导航
- 设计模式
- Java面试宝典2015版(绝对值得收藏超长版)(一)
- java listener 与 观察者模式入门
- java 加载资源方法
- java项目命名规范
- android之java程序性能优化
- 帧同步在竞技类网络游戏中的应用
- 【学习笔记】【C语言】指向函数的指针
- More Effective C++ 条款3 绝对不要以多态(polymorphically)方式处理数组
- atitit.高级编程语言的特性 and 未来趋势与进化.doc
- vw安装
- atitit.高级编程语言的特性 and 未来趋势与进化.doc
- webstorm快捷键收集