ParaView和VTK中场景的导入与导出

ParaView作为一款优秀的后处理软件,可以说将VTK的功能已经发挥的淋漓尽致了,不过最近发现在场景导入导出方面二者还是有些差异。

场景的导入(Import)和导出(Export)是指将渲染场景中的对象,包括光照、相机、Actor、属性、变换矩阵等信息写入文件中,或者从外部文件中将这些对象导入渲染场景中,一般所导入的文件含有多个数据集。

VTK中一般以关键字Importer和Exporter命名的类是与场景的导入和导出相关的。Importer类可导入由其它3D模型软件(如3DS MAX)所生成的文件;Exporter则可以将VTK里的场景生成可被其它3D模型软件所处理的文件。

下面就看一下VTK和ParaView中支持的Importer和Exporter类型:

类别 VTK ParaView
Importer vtk3DSImporter 不能读取*.3ds
vtkVRMLImporter 可以读取*vrml
  可读取*.obj
Exporter vtkGL2PSExporter cinema database(*.cdb)
vtkIVExporter EPS files(*.eps)
vtkOBJExporter PDF files(*.pdf)
vtkOOGLExporter PS files(*.ps)
vtkRIBExporter SVG files(*.svg)
vtkVRMLExporter POV files(*.pov)
vtkPOVExporter *.vtp
vtkX3DExporter *.vrml
  *.webgl
  *.x3d
  *.x3db

从上表中可以看出,二者在导入导出场景方面存在一些差异,比如paraview不能导入3DS Max的结果,但是可以读入*.obj格式的文件。下面就通过一个实例展示VTK和ParaView的场景导入导出。

在VTK中读入*.3ds的文件,并导出*.obj格式的文件用于在Paraview中展示:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 


int main ( int argc, char *argv[])
{
	if(argc != 2)
	{
		std::cout << "Required arguments: Filename(*.3ds)" << std::endl;
		return EXIT_FAILURE;
	}

	std::string filename = argv[1];
	std::cout << "Reading " << filename << std::endl;

	// 导入3DS文件(*.3ds)
	vtkSmartPointer importer = vtkSmartPointer::New();
	importer->SetFileName ( filename.c_str() );
    // 计算法向量
	importer->ComputeNormalsOn();
	importer->Read();

	vtkSmartPointer renderer = importer->GetRenderer();
	vtkSmartPointer renderWindow = importer->GetRenderWindow();
	vtkSmartPointer renderWindowInteractor = 
		vtkSmartPointer::New();
	renderWindowInteractor->SetRenderWindow(renderWindow);

	renderer->GradientBackgroundOn();
	renderer->SetBackground(1.0, 1.0, 1.0);
	renderer->SetBackground2(0.0, 0.0, 0.0);
	renderWindow->Render();
	renderWindow->SetSize(640, 480);
	renderWindow->SetWindowName("Import3DS");

    // 导出obj文件(*.obj),用于在paraview中显示
	vtkSmartPointer exporter = vtkSmartPointer::New();
	exporter->SetFilePrefix("car");
	exporter->SetRenderWindow(renderWindow);
	exporter->Write();


	renderWindowInteractor->Start();

	return EXIT_SUCCESS;
}

运行后在VTK中的显示效果为:

ParaView和VTK中场景的导入与导出_第1张图片

然后在Paraview中导入生成的car.obj,效果如下(显示的颜色是其属性数据:法向量):

ParaView和VTK中场景的导入与导出_第2张图片

 

你可能感兴趣的:(ParaView,VTK)