mirror of
https://git.mirrors.martin98.com/https://github.com/syoyo/tinygltf.git
synced 2025-06-22 13:50:17 +08:00

This renaming is done so that the config file matches the project name which is TinyGLTF. This is done to prevent future name collision should the Khronos glTF project decides to provide their own CMake configuration file.
Header only C++ tiny glTF library(loader/saver).
TinyGLTF
is a header only C++11 glTF 2.0 https://github.com/KhronosGroup/glTF library.
TinyGLTF
uses Niels Lohmann's json library(https://github.com/nlohmann/json), so now it requires C++11 compiler.
If you are looking for old, C++03 version, please use devel-picojson
branch.
Status
v2.0.0 release(22 Aug, 2018)!
Builds
Features
- Written in portable C++. C++-11 with STL dependency only.
- macOS + clang(LLVM)
- iOS + clang
- Linux + gcc/clang
- Windows + MinGW
- Windows + Visual Studio 2015 Update 3 or later.
- Visual Studio 2013 is not supported since they have limited C++11 support and failed to compile
json.hpp
.
- Visual Studio 2013 is not supported since they have limited C++11 support and failed to compile
- Android NDK
- Android + CrystaX(NDK drop-in replacement) GCC
- Web using Emscripten(LLVM)
- Moderate parsing time and memory consumption.
- glTF specification v2.0.0
- ASCII glTF
- Binary glTF(GLB)
- PBR material description
- Buffers
- Parse BASE64 encoded embedded buffer data(DataURI).
- Load
.bin
file.
- Image(Using stb_image)
- Parse BASE64 encoded embedded image data(DataURI).
- Load external image file.
- PNG(8bit only)
- JPEG(8bit only)
- BMP
- GIF
- Custom Image decoder callback(e.g. for decoding OpenEXR image)
- Load from memory
- Custom callback handler
- Image load
Examples
Projects using TinyGLTF
- px_render Single header C++ Libraries for Thread Scheduling, Rendering, and so on... https://github.com/pplux/px
- Physical based rendering with Vulkan using glTF 2.0 models https://github.com/SaschaWillems/Vulkan-glTF-PBR
- GLTF loader plugin for OGRE 2.1. Support for PBR materials via HLMS/PBS https://github.com/Ybalrid/Ogre_glTF
- TinyGltfImporter plugin for Magnum, a lightweight and modular C++11/C++14 graphics middleware for games and data visualization.
- Your projects here! (Please send PR)
TODOs
- Write C++ code generator which emits C++ code from JSON schema for robust parsing.
- Mesh Compression/decompression(Open3DGC, etc)
- Load Draco compressed mesh
- Support
extensions
andextras
property - HDR image?
- OpenEXR extension through TinyEXR.
- Write example and tests for
animation
andskin
- Skinning
- Morph targets
Licenses
TinyGLTF is licensed under MIT license.
TinyGLTF uses the following third party libraries.
- json.hpp : Copyright (c) 2013-2017 Niels Lohmann. MIT license.
- base64 : Copyright (C) 2004-2008 René Nyffenegger
- stb_image.h : v2.08 - public domain image loader - Github link
- stb_image_write.h : v1.09 - public domain image writer - Github link
Build and example
Copy stb_image.h
, stb_image_write.h
, json.hpp
and tiny_gltf.h
to your project.
Loading glTF 2.0 model
// Define these only in *one* .cc file.
#define TINYGLTF_IMPLEMENTATION
#define STB_IMAGE_IMPLEMENTATION
#define STB_IMAGE_WRITE_IMPLEMENTATION
// #define TINYGLTF_NOEXCEPTION // optional. disable exception handling.
#include "tiny_gltf.h"
using namespace tinygltf;
Model model;
TinyGLTF loader;
std::string err;
std::string warn;
bool ret = loader.LoadASCIIFromFile(&model, &err, &warn, argv[1]);
//bool ret = loader.LoadBinaryFromFile(&model, &err, &warn, argv[1]); // for binary glTF(.glb)
if (!warn.empty()) {
printf("Warn: %s\n", warn.c_str());
}
if (!err.empty()) {
printf("Err: %s\n", err.c_str());
}
if (!ret) {
printf("Failed to parse glTF\n");
return -1;
}
Compile options
TINYGLTF_NOEXCEPTION
: Disable C++ exception in JSON parsing. You can use-fno-exceptions
or by defining the symbolJSON_NOEXCEPTION
andTINYGLTF_NOEXCEPTION
to fully remove C++ exception codes when compiling TinyGLTF.TINYGLTF_NO_STB_IMAGE
: Do not load images with stb_image. Instead useTinyGLTF::SetImageLoader(LoadimageDataFunction LoadImageData, void *user_data)
to set a callback for loading images.TINYGLTF_NO_STB_IMAGE_WRITE
: Do not write images with stb_image_write. Instead useTinyGLTF::SetImageWriter(WriteimageDataFunction WriteImageData, void *user_data)
to set a callback for writing images.TINYGLTF_NO_EXTERNAL_IMAGE
: Do not try to load external image file. This option woulde be helpful if you do not want load image file during glTF parsing.
Saving gltTF 2.0 model
- Buffers.
- To file
- Embedded
- Draco compressed?
- Images
- To file
- Embedded
- Binary(.glb)
Running tests.
glTF parsing test
Setup
Python 2.6 or 2.7 required. Git clone https://github.com/KhronosGroup/glTF-Sample-Models to your local dir.
Run parsing test
After building loader_example
, edit test_runner.py
, then,
$ python test_runner.py
Unit tests
$ cd tests
$ make
$ ./tester
$ ./tester_noexcept
Third party licenses
- json.hpp : Licensed under the MIT License http://opensource.org/licenses/MIT. Copyright (c) 2013-2017 Niels Lohmann http://nlohmann.me.
- stb_image : Public domain.
- catch : Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved. Distributed under the Boost Software License, Version 1.0.
Languages
C++
82.4%
C
17.2%
CMake
0.2%
Python
0.1%