TinyGLTF 는 헤더 전용 C ++ 11 GLTF 2.0 https://github.com/khronosgroup/gltf 라이브러리입니다.
TinyGLTF Niels Lohmann의 JSON 라이브러리 (https://github.com/nlohmann/json)를 사용하므로 이제 C ++ 11 컴파일러가 필요합니다. (또한 Radpidjson을 JSON 백엔드로 사용할 수 있습니다) 오래된 C ++ 03 버전을 찾고 있다면 devel-picojson Branch (더 이상 유지되지 않음)를 사용하십시오.
현재 TinyGLTF는 안정적이며 유지 보수 모드입니다. 급격한 변화와 기능 추가가 계획되지 않았습니다.
sajson : Sajson을 사용하여 JSON을 구문 분석하십시오. 구문 분석 만하지만 더 빠른 컴파일 시간 (JSON.HPP 및 RapidJson에 비해 2 배 감소)이지만 잘 유지되지는 않습니다. 아마도 대부분 기능이 완성 될 것입니다. 마지막 누락 된 기능은 Draco 인코딩입니다 : #207
json.hpp 컴파일하지 못하므로 지원되지 않습니다. .bin 파일을로드합니다. Extension ( ExtensionMap )에서 JSON 번호 값은 int 또는 float (번호)로 구문 분석되고 tinygltf::Value 객체로 저장됩니다. tinygltf::Value 에서 플로팅 포인트 값을 원한다면 GetNumberAsDouble() 메소드를 사용하십시오.
IsNumber() 기본 값이 int 값 또는 부동 소수점 값인 경우 true를 반환합니다.
TinyGLTF를 안전하고 안전하게 실행하려는 사용자 (예 : 온라인 GLTF 변환을 위해 MalsiousCLTF 파일을 처리해야합니다) WASM Target 용 TinyGLTF를 구축하는 것이 좋습니다. WASI 빌드 예제는 WASM에 있습니다.
- 최신 그래픽이있는 3D 엔진extensions 및 extras 속성을 지원합니다 animation 과 skin 에 대한 예제와 테스트를 작성하십시오TinyGLTF는 MIT 라이센스에 따라 라이센스가 부여됩니다.
TinyGLTF는 다음 타사 라이브러리를 사용합니다.
stb_image.h , stb_image_write.h , json.hpp 및 tiny_gltf.h 프로젝트에 복사하십시오.
// 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 ;
}TinyGLTF::SetPreserveimageChannels(bool onoff) . 로드 된 이미지에 대해 이미지 파일에 저장된대로 이미지 채널을 보존하려면 true . 역 호환성에 대한 기본적으로 false (이미지 채널은 RGBA 4 채널로 넓어집니다). 내장 이미지 로더 (STB 이미지 로더)를 사용할 때만 효과적입니다. TINYGLTF_NOEXCEPTION : JSON 구문 분석에서 C ++ 예외를 비활성화합니다. -fno-exceptions 사용하거나 JSON_NOEXCEPTION 및 TINYGLTF_NOEXCEPTION 기호를 정의하여 TinyGLTF를 컴파일 할 때 C ++ 예외 코드를 완전히 제거 할 수 있습니다.TINYGLTF_NO_STB_IMAGE : stb_image와 함께 이미지를로드하지 마십시오. 대신 TinyGLTF::SetImageLoader(LoadimageDataFunction LoadImageData, void *user_data) 사용하여 이미지로드를위한 콜백을 설정하십시오.TINYGLTF_NO_STB_IMAGE_WRITE : stb_image_write로 이미지를 쓰지 마십시오. 대신 TinyGLTF::SetImageWriter(WriteimageDataFunction WriteImageData, void *user_data) 사용하여 이미지를 작성하기위한 콜백을 설정하십시오.TINYGLTF_NO_EXTERNAL_IMAGE : 외부 이미지 파일을로드하지 마십시오. 이 옵션은 GLTF 파싱 중에 이미지 파일을로드하지 않으려면 도움이됩니다.TINYGLTF_ANDROID_LOAD_FROM_ASSETS : 일반 파일 시스템 대신 패키지 앱 자산에서 모든 파일을로드하십시오. 참고 : Android 앱에서 tinygltf::asset_manager 로 유효한 자산 관리자를 전달해야합니다.TINYGLTF_ENABLE_DRACO : draco 압축을 활성화합니다. 사용자는 프로젝트 파일에 PATH 및 LINK CORRESPNDING 라이브러리를 제공해야합니다.TINYGLTF_NO_INCLUDE_JSON : tiny_gltf.h 내에서 json.hpp 포함하여 비활성화하기 전에 이미 포함되었거나 tiny_gltf.h 포함하기 전에 사용자 정의 경로를 사용하여 포함 시키려고합니다.TINYGLTF_NO_INCLUDE_RAPIDJSON : tiny_gltf.h 내에서 RapidJson의 헤더 파일을 포함하여 이미 포함되었거나 tiny_gltf.h 포함하기 전에 사용자 정의 경로를 사용하여 포함시키려는 것이기 때문에 비활성화합니다.TINYGLTF_NO_INCLUDE_STB_IMAGE : tiny_gltf.h 내에서 stb_image.h 포함하여 비활성화하기 전에 이미 포함되었거나 tiny_gltf.h 포함하기 전에 사용자 정의 경로를 사용하여 포함 시키려고합니다.TINYGLTF_NO_INCLUDE_STB_IMAGE_WRITE : tiny_gltf.h 내에서 stb_image_write.h 포함하여 비활성화하기 전에 이미 포함되었거나 tiny_gltf.h 포함하기 전에 사용자 정의 경로를 사용하고 싶기 때문에 비활성화하십시오.TINYGLTF_USE_RAPIDJSON : rapidjson을 JSON 파서/시리얼 라이저로 사용하십시오. RapidJson 파일은 TinyGLTF Repo에 포함되지 않습니다. 이 기능을 활성화하면 RapidJson으로의 포함 경로를 설정하십시오.TINYGLTF_USE_CPP14 : C ++ 14 기능을 사용합니다 (C ++ 14 컴파일러 필요). 이것은 C ++ 11보다 더 나은 성능을 제공 할 수 있습니다. add_subdirectory 기능을 사용하여 tinygltf를 추가 할 수 있습니다. add_subdirectory 사용하여 프로젝트에 tinygltf를 추가하는 경우 TINYGLTF_HEADER_ONLY 설정하는 것이 좋습니다 (tinygltf로 포함 된 경로를 추가) 및 TINYGLTF_INSTALL (tinygltf 파일을 설치하지 않음).
// Your project's CMakeLists.txt
...
set(TINYGLTF_HEADER_ONLY ON CACHE INTERNAL "" FORCE)
set(TINYGLTF_INSTALL OFF CACHE INTERNAL "" FORCE)
add_subdirectory(/path/to/tinygltf)
파이썬이 필요합니다. git 클론 https://github.com/khronosgroup/gltf-sample-models는 로컬 디르에 있습니다.
loader_example 구축 한 후 test_runner.py 편집하고,
$ python test_runner.py$ cd tests
$ make
$ ./tester
$ ./tester_noexcept 자세한 내용은 tests/fuzzer 참조하십시오.
일주일에 Ryzen9 3950x에서 퍼지를 실행 한 후, Fuzzer의 메모리 외 오류를 제외하고는 적어도 LoadASCIIFromString 안전 해 보입니다. GLTF 데이터를 구문 분석 할 때 제한된 메모리 크기 확인을 도입하는 것이 좋습니다.