/**********************************************************************
文件名: 2.2_TextureExample.cpp
Copyright (c) 张晓东, 罗火灵. All rights reserved.
更多信息请访问:
http://www.vtkchina.org (VTK中国)
http://blog.youkuaiyun.com/www_doling_net (东灵工作室)
**********************************************************************/
#include <vtkSmartPointer.h>
#include <vtkJPEGReader.h>
#include <vtkTexture.h>
#include <vtkPlaneSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
//测试文件:data/texture.jpg
int main(int argc, char* argv[])
{
/*if (argc < 2)
{
std::cout<<argv[0]<<" "<<"TextureFile(*.jpg)"<<std::endl;
return EXIT_FAILURE;
}*/
vtkSmartPointer< vtkJPEGReader > reader =
vtkSmartPointer< vtkJPEGReader >::New();
//reader->SetFileName(argv[1]);
reader->SetFileName("coman.jpeg");
vtkSmartPointer< vtkTexture > texture =
vtkSmartPointer< vtkTexture >::New();
texture->SetInputConnection( reader->GetOutputPort() );
texture->InterpolateOn();
vtkSmartPointer< vtkPlaneSource > plane =
vtkSmartPointer< vtkPlaneSource >::New();
vtkSmartPointer< vtkPolyDataMapper > mapper =
vtkSmartPointer< vtkPolyDataMapper >::New();
mapper->SetInputConnection( plane->GetOutputPort() );
vtkSmartPointer< vtkActor > actor =
vtkSmartPointer< vtkActor >::New();
actor->SetMapper( mapper );
actor->SetTexture( texture );
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor( actor );
renderer->SetBackground( 1.0, 1.0, 1.0);
vtkSmartPointer<vtkRenderWindow> renWin =
vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer( renderer );
renWin->SetSize( 640, 480 );
renWin->Render();
renWin->SetWindowName("TextureExample");
vtkSmartPointer<vtkRenderWindowInteractor> iren =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);
iren->Initialize();
iren->Start();
return EXIT_SUCCESS;
}
报错如下:
思路:既然读取不到文件,猜测可能是两个方面的问题,一个是文件路径错误,导致读取到的是空的图片文件,二是文件读取器vtkJPEGReader适合读取的文件类型和实际提供的文件类型不一致。
最终结果:发现将图片路径替换为绝对路径之后,程序能够正常运行,原因是VS2019的Source Files文件夹不是程序运行的目录,只是源代码所在的目录,所以只有把图片放在程序运行目录下才是正确的,而VTK的程序运行目录即为cmake编译后的bin文件夹(这个文件夹通常命名为bin, 位置由自己决定); 而JPEG读取器是能够读取jpg和jpeg这两种类型的文件的,实际没有任何区别。