GLTFImporter
VTKExamples/Cxx/IO/GLTFImporter
The example uses vtkGLTFImporter to import a scene from a gltf file. glTF (derivative short form of GL Transmission Format) is a file format for 3D scenes and models using the JSON standard. It is an API-neutral runtime asset delivery format developed by the Khronos Group 3D Formats Working Group. It was announced at HTML5DevConf 2016.
There are many sources of glTF file including:
- SketchLab. To download you will need to signup. There are also non-free models offered here.
- Khronos Group
usage
GLTFImporter FlightHelmet.gltf
Warning
When you run the example, be sure to specify the full pathname of the .glTF file. There is currently a bug in the vtkGLTFImporter. For example, if your home directry is /home/janedoe the the full pathname of the FlightHelmet data is /home/janedoe/VTKExamples/src/Testing/Data/gltf/FlightHelmet/FlightHelmet.gltf.
Warning
The gltf files are stored using git's lfs large file system. If you do not have git lfs installed, you may access the FlightHelmet Data) directly from the orignal repo. Be sure to download all of the files.
Question
If you have a simple question about this example contact us at VTKExamplesProject If your question is more complex and may require extended discussion, please use the VTK Discourse Forum
Code¶
GLTFImporter.cxx
#include <vtkSmartPointer.h> #include <vtkGLTFImporter.h> #include <vtkCamera.h> #include <vtkLight.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkInteractorStyleTrackballCamera.h> #include <vtkRenderer.h> #include <vtkNamedColors.h> int main(int argc, char* argv[]) { if (argc <= 1) { std::cout << "Usage: " << argv[0] << " <gltf file>" << std::endl; return EXIT_FAILURE; } auto colors = vtkSmartPointer<vtkNamedColors>::New(); vtkColor3d backgroundColor = colors->GetColor3d("SlateGray"); auto importer = vtkSmartPointer<vtkGLTFImporter>::New(); importer->SetFileName(argv[1]); auto renderer = vtkSmartPointer<vtkRenderer>::New(); renderer->SetBackground(backgroundColor.GetData()); renderer->UseHiddenLineRemovalOn(); auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->SetSize(640, 512); renderWindow->AddRenderer(renderer); auto renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); renderWindowInteractor->SetRenderWindow(renderWindow); auto style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New(); renderWindowInteractor->SetInteractorStyle(style); importer->SetRenderWindow(renderWindow); importer->Update(); auto headLight = vtkSmartPointer<vtkLight>::New(); headLight->SetLightTypeToHeadlight(); headLight->SwitchOn(); renderer->AddLight(headLight); renderWindow->Render(); renderer->ResetCamera(); renderer->GetActiveCamera()->Azimuth(20); renderer->GetActiveCamera()->Elevation(30); renderer->ResetCameraClippingRange(); renderWindow->Render(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }
CMakeLists.txt¶
cmake_minimum_required(VERSION 3.3 FATAL_ERROR) project(GLTFImporter) find_package(VTK COMPONENTS vtkCommonColor vtkCommonCore vtkIOImport vtkInteractionStyle vtkRenderingContextOpenGL2 vtkRenderingCore vtkRenderingFreeType vtkRenderingGL2PSOpenGL2 vtkRenderingOpenGL2 QUIET) if (NOT VTK_FOUND) message("Skipping GLTFImporter: ${VTK_NOT_FOUND_MESSAGE}") return () endif() message (STATUS "VTK_VERSION: ${VTK_VERSION}") if (VTK_VERSION VERSION_LESS "8.90.0") # old system include(${VTK_USE_FILE}) add_executable(GLTFImporter MACOSX_BUNDLE GLTFImporter.cxx ) target_link_libraries(GLTFImporter PRIVATE ${VTK_LIBRARIES}) else () # include all components add_executable(GLTFImporter MACOSX_BUNDLE GLTFImporter.cxx ) target_link_libraries(GLTFImporter PRIVATE ${VTK_LIBRARIES}) # vtk_module_autoinit is needed vtk_module_autoinit( TARGETS GLTFImporter MODULES ${VTK_LIBRARIES} ) endif ()
Download and Build GLTFImporter¶
Click here to download GLTFImporter and its CMakeLists.txt file. Once the tarball GLTFImporter.tar has been downloaded and extracted,
cd GLTFImporter/build
If VTK is installed:
cmake ..
If VTK is not installed but compiled on your system, you will need to specify the path to your VTK build:
cmake -DVTK_DIR:PATH=/home/me/vtk_build ..
Build the project:
make
and run it:
./GLTFImporter
WINDOWS USERS
Be sure to add the VTK bin directory to your path. This will resolve the VTK dll's at run time.