vtk环境搭建 见(VTK开发环境配置(Visual Studio C++)-详细图文教程-CSDN博客)
在学习vtk图形图像进阶的第二章时,通过vs2022建的控制台程序,编写运行示例2.1 发现 不显示图像。
#include <iostream>
#include<vtkRenderWindow.h>
#include<vtkSmartPointer.h>
#include<vtkRenderWindowInteractor.h>
#include<vtkCylinderSource.h>
#include<vtkPolyDataMapper.h>
#include<vtkRenderer.h>
#include<vtkInteractorStyleTrackballCamera.h>
#include<vtkActor.h>
int main()
{std::cout << "vtk";vtkSmartPointer<vtkCylinderSource> cylinder =vtkSmartPointer<vtkCylinderSource>::New();if (!cylinder) {std::cerr << "Failed to create vtkCylinderSource" << std::endl;return 1;}cylinder->SetHeight(3.0);cylinder->SetRadius(1.0);cylinder->SetResolution(10);vtkSmartPointer<vtkPolyDataMapper> cylinderMapper =vtkSmartPointer<vtkPolyDataMapper>::New();cylinderMapper->SetInputConnection(cylinder->GetOutputPort());vtkSmartPointer<vtkActor> cylinderActor =vtkSmartPointer<vtkActor>::New();cylinderActor->SetMapper(cylinderMapper);vtkSmartPointer<vtkRenderer> renderer =vtkSmartPointer<vtkRenderer>::New();renderer->AddActor(cylinderActor);renderer->SetBackground(0.1,0.2,0.4);vtkSmartPointer<vtkRenderWindow> renWin =vtkSmartPointer<vtkRenderWindow>::New();renWin->AddRenderer(renderer);renWin->SetSize(300,300);vtkSmartPointer<vtkRenderWindowInteractor> iren =vtkSmartPointer<vtkRenderWindowInteractor>::New();iren->SetRenderWindow(renWin);vtkSmartPointer<vtkInteractorStyleTrackballCamera> style =vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();iren->SetInteractorStyle(style);iren->Initialize();iren->Start();return 0;
}
经过查找资料,发现可能原因是 动态链接库的加载在不同平台上可能有不同的机制和优先级。默认情况下,VTK 可能无法准确找到并加载所需的动态链接库。
所以通过使用 vtkAutoInit.h
和相关的 VTK_MODULE_INIT
宏确保所有必要的 VTK 模块被正确初始化
解决方法
在上面的代码开头添加
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
然后可以显示图像了。
本小节知识总结,
vtkCylinderSource生成一个理想化的圆柱体几何模型。
vtkPolyDataMapper渲染多边形几何数据。
vtkActor连接几何数据与渲染场景,并赋予其可视化属性。
vtkRenderWindow 将操作系统和vtk渲染引擎连接到一起。
vtkRenderer负责管理场景的渲染过程。
vtkRenderWindowInteractor 提供独立的响应事件的交互。
vtkInteractorStyleTrackballCamera交互器样式的一种,用户通过控制相机对物体进行旋转,放大,缩小等操作。