.cpp文件
引入
#include <vtkPolyDataReader.h>
#include <vtkOBJReader.h>
#include <vtkSTLReader.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkCamera.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkSmartPointer.h>
#include <vtkGLTFImporter.h>
//不添加报错,原因???
#include <vtkAutoInit.h>
#include <iostream>
#include <thread>
#include <chrono>
#include <mutex>
#include <condition_variable>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
加载obj模型
//加载obj模型
vtkSmartPointer<vtkOBJReader> reader = vtkSmartPointer<vtkOBJReader>::New(); // 读取OBJ
reader->SetFileName("path/demo.obj");
reader->Update();
vtkSmartPointer <vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(reader->GetOutputPort());
vtkSmartPointer <vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
renderer->AddActor(actor);
加载stl模型
//加载stl模型
vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New(); // 读取STL
reader->SetFileName("path/demo.stl");
reader->Update();
vtkSmartPointer <vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(reader->GetOutputPort());
vtkSmartPointer <vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
renderer->AddActor(actor);
加载gltf模型
//加载gltf模型
vtkSmartPointer<vtkGLTFImporter> importer = vtkSmartPointer<vtkGLTFImporter>::New();
importer->SetFileName("path/demo.gltf");
importer->Read();
vtkSmartPointer<vtkActorCollection> actors = importer->GetRenderer()->GetActors();
actors->InitTraversal();
for (vtkIdType i = 0; i < actors->GetNumberOfItems(); ++i) {
vtkActor* actor = actors->GetNextActor();
//actor->GetProperty()->SetEdgeColor(255, 241, 0); // 显示边框颜色
//actor->GetProperty()->SetEdgeVisibility(1); // 显示边框
// 处理每个 actor
renderer->AddActor(actor);
}
加载gltf文件,尝试加载glb文件时,部分文件报错,估计材质vtk不支持
vtkGLTFDocumentLoader (0000021F4E54CB20): glTF extension KHR_materials_pbrSpecularGlossiness is used in this model, but not supported by this loader. The extension will be ignored.
全部代码
#include <vtkPolyDataReader.h>
#include <vtkOBJReader.h>
#include <vtkSTLReader.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkCamera.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkSmartPointer.h>
#include <vtkGLTFImporter.h>
#include <vtkAutoInit.h>
#include <iostream>
#include <thread>
#include <chrono>
#include <mutex>
#include <condition_variable>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
int main()
{
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
//设置窗口尺寸
renderWindow->SetSize(600, 600);
//窗口title
renderWindow->SetWindowName("vtkGLTFReader");
///*开启全屏*/
renderWindow->SetFullScreen(true);
开启全屏
renderWindow->FullScreenOn();
关闭全屏
renderWindow->FullScreenOff();
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
renderWindowInteractor->SetInteractorStyle(style);
//加载gltf模型
vtkSmartPointer<vtkGLTFImporter> importer = vtkSmartPointer<vtkGLTFImporter>::New();
importer->SetFileName("path/demo.gltf");
importer->Read();
vtkSmartPointer<vtkActorCollection> actors = importer->GetRenderer()->GetActors();
actors->InitTraversal();
for (vtkIdType i = 0; i < actors->GetNumberOfItems(); ++i) {
vtkActor* actor = actors->GetNextActor();
//actor->GetProperty()->SetEdgeColor(255, 241, 0); // 显示边框颜色
//actor->GetProperty()->SetEdgeVisibility(1); // 显示边框
// 处理每个 actor
renderer->AddActor(actor);
}
加载obj模型
//vtkSmartPointer<vtkOBJReader> reader = vtkSmartPointer<vtkOBJReader>::New(); // 读取OBJ
//reader->SetFileName("path/demo.obj");
//reader->Update();
//vtkSmartPointer <vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
//mapper->SetInputConnection(reader->GetOutputPort());
//vtkSmartPointer <vtkActor> actor = vtkSmartPointer<vtkActor>::New();
//actor->SetMapper(mapper);
//renderer->AddActor(actor);
加载stl模型
//vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New(); // 读取STL
//reader->SetFileName("path/demo.stl");
//reader->Update();
//vtkSmartPointer <vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
//mapper->SetInputConnection(reader->GetOutputPort());
//vtkSmartPointer <vtkActor> actor = vtkSmartPointer<vtkActor>::New();
//actor->SetMapper(mapper);
//renderer->AddActor(actor);
// 设置背景颜色
renderer->SetBackground(0.1, 0.2, 0.4);
renderWindow->Render();
renderWindowInteractor->Start();
return 0;
}