VTK可视化工具包之旅03-给窗口中添加物体

144 阅读1分钟

首先我们要想的是,我们已经有个窗口了,我们能够对窗口进行放大缩小,保留边框,全屏等一系列操作。那么我们现在想的是,我们要往我们的场景中添加各种各样的物品。然后通过这些物品我们才能够对程序进行各种各样的操作。

这篇文章我们来研究一个效果,我们往场景中添加一个物品,添加好了之后我们对这个物品进行放大,缩小,旋转等各种操作,通过鼠标滚轮。

实现效果

image.png

步骤拆分

  1. 定义材质
  2. 定义网格
  3. 混合材质和网格
  4. 将混合后的材质和网格加入到场景当中去
  5. 设置窗体渲染器
  6. 设置窗体对象再将窗体渲染器加入到窗体对象
  7. 设置窗体交互机制,将监听到的特定平台的鼠标、键盘、时钟事件交给vtkInteractorObserver或者其子类,如vtkInteractorStyle进行处理。vtkInteractorStyle等监听消息并且处理完成旋转、拉伸缩放等操作
  8. 设置vtkInteractorStyleTrackballCamera为交互场景的相机
  9. 启动交互场景【不然只能展示二维的图像信息】

代码实现

#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 "vtkAutoInit.h" 
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);

int main()
{
	vtkSmartPointer<vtkCylinderSource> cylinder =
		vtkSmartPointer<vtkCylinderSource>::New();
	// 设置高度
	cylinder->SetHeight(3.0);
	// 设置半径
	cylinder->SetRadius(1.0);
	// 设置圆柱体有几个边
	cylinder->SetResolution(3.0);

	vtkSmartPointer<vtkPolyDataMapper> cylinderMapper =
		vtkSmartPointer<vtkPolyDataMapper>::New();
	cylinderMapper->SetInputConnection(cylinder->GetOutputPort());

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

	vtkSmartPointer<vtkRenderer> renderer =
		vtkSmartPointer<vtkRenderer>::New();
	renderer->AddActor(cylinderActor);
	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("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;
}