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

6 篇文章 5 订阅

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

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

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

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

类别VTKParaView
Importervtk3DSImporter不能读取*.3ds
vtkVRMLImporter可以读取*vrml
 可读取*.obj
ExportervtkGL2PSExportercinema database(*.cdb)
vtkIVExporterEPS files(*.eps)
vtkOBJExporterPDF files(*.pdf)
vtkOOGLExporterPS files(*.ps)
vtkRIBExporterSVG files(*.svg)
vtkVRMLExporterPOV files(*.pov)
vtkPOVExporter*.vtp
vtkX3DExporter*.vrml
 *.webgl
 *.x3d
 *.x3db

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

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

#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtk3DSImporter.h>
#include <vtkOBJExporter.h>
#include <vtkDataSet.h>
#include <vtkPolyData.h>
#include <vtkSmartPointer.h>


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<vtk3DSImporter> importer = vtkSmartPointer<vtk3DSImporter>::New();
	importer->SetFileName ( filename.c_str() );
    // 计算法向量
	importer->ComputeNormalsOn();
	importer->Read();

	vtkSmartPointer<vtkRenderer> renderer = importer->GetRenderer();
	vtkSmartPointer<vtkRenderWindow> renderWindow = importer->GetRenderWindow();
	vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = 
		vtkSmartPointer<vtkRenderWindowInteractor>::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<vtkOBJExporter> exporter = vtkSmartPointer<vtkOBJExporter>::New();
	exporter->SetFilePrefix("car");
	exporter->SetRenderWindow(renderWindow);
	exporter->Write();


	renderWindowInteractor->Start();

	return EXIT_SUCCESS;
}

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

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

 

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_黄岛主_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值