VTK 圆柱体的生成与渲染

一、简单VTK程序

1、代码示例

#include <vtkRenderWindow.h>
#include <vtkSmartPointer.h>
#include <vtkAutoInit.h> 

VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);

int main()
{
    
    
	vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();//用智能指针定义一个vtkRenderWindow对象
	renWin->Render();//显示并渲染VTK窗口

	renWin->SetWindowName("TestVTKInstall");
	renWin->SetSize(640, 480);
	renWin->Render();

	std::cin.get();
	return EXIT_SUCCESS;
}

二、生成圆柱

1、代码实现

#include <vtkAutoInit.h> 
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkCylinderSource.h>//生成一个中心在渲染场景原点的柱体
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkPLYWriter.h>

int main()
{
    
    
	//---------------生成一个中心在渲染场景原点的柱体---------------
	//柱体的长轴沿Y轴,柱体的高度截面半径等都可以任意指定
	vtkSmartPointer<vtkCylinderSource> cylinder = vtkSmartPointer<vtkCylinderSource>::New();
	cylinder->SetHeight(3.0);//设置柱体的高
	cylinder->SetRadius(1.0);//设置柱体的半径
	cylinder->SetResolution(10);//设置柱体横截面的等边多边形的边数 
	//---------------用于渲染多边形几何数据-------------------------
	vtkSmartPointer<vtkPolyDataMapper> cylinderMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
	cylinderMapper->SetInputConnection(cylinder->GetOutputPort()); //VTK可视化管线的输入数据接口

	vtkSmartPointer<vtkActor> cylinderActor = vtkSmartPointer<vtkActor>::New();
	cylinderActor->SetMapper(cylinderMapper);
	cylinderActor->GetProperty()->SetColor(0.0, 0.0, 1.0);

	//-------------------写出为PLY格式文件--------------------------
	vtkSmartPointer<vtkPLYWriter>  plywriter = vtkSmartPointer<vtkPLYWriter>::New();
	plywriter->SetFileName("cylinder.ply");
	plywriter->SetInputConnection(cylinder->GetOutputPort());
	plywriter->Write();
	plywriter->Update();
	//----------------------管理场景渲染过程------------------
	vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
	renderer->AddActor(cylinderActor);
	renderer->SetBackground(1.0, 1.0, 1.0);//RGB取值范围0~1
	//----------------------设置窗口参数----------------------
	vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
	renWin->AddRenderer(renderer);
	renWin->SetSize(640, 480);//设置窗口大小,以像素为单元
	renWin->Render();
	renWin->SetWindowName("RenderCylinder");
	//---------------------交互机制--------------------------
	vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
	iren->SetRenderWindow(renWin);

	vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
	iren->SetInteractorStyle(style);

	iren->Initialize();
	iren->Start();

	return EXIT_SUCCESS;
}

2、结果展示

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36686437/article/details/125459947