From 8c5d744023162134ffcc498f652775300fba00ea Mon Sep 17 00:00:00 2001 From: Antoine Bolvy Date: Tue, 18 Apr 2017 21:04:45 -0400 Subject: [PATCH] Initial README.md --- README.md | 51 ++++++++++++++++++++++++++++++++++++++++++- doc/gltf2-loader.png | Bin 0 -> 14364 bytes 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 doc/gltf2-loader.png diff --git a/README.md b/README.md index dcc1930..e288f5b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,51 @@ +![](./doc/gltf2-loader.png) + + +--- + # glTF2-loader -C++ glTF (2.0 only) loader + +`glTF2-loader` is a C++14 [glTF][gltf] ([2.0 only][gltf-2-spec]) parsing library. + +## Building + +Bulding should be as simple as executing the following commands: +``` +mkdir build +cd build +cmake .. +make +``` + +If you're building for Android, you should use cmake with `-DANDROID=TRUE` + +The build process should output a static library, `libgltf2-loader.a`. + +## Documentation + +Coming soon. For now, the code should be well-enough documented inline, but we should definitely have some Doxygen thing going on in the near future. + +## Tests + +Tests, using the googletest framework, can be enabled with the `BUILD_TESTS` CMake variable. An executable will be created in the `test/` subdirectory, in your build directory. + +CI coming soon. + +## Projects using this library + +* [Lugdunum](https://lugdunum3d.github.io) + +Feel free to open a pull-request to add your project to the list! + +## License + +glTF2-loader is licensed under [MIT license](./LICENSE). + +glTF2-loader uses the following third party libraries: + +* [json.hpp](https://github.com/nlohmann/json): Copyright © 2013-2017 Niels Lohmann + +*glTF and the glTF logo are trademarks of the Khronos Group Inc.* + +[gltf]: https://github.com/KhronosGroup/glTF +[gltf-2-spec]: https://github.com/KhronosGroup/glTF/tree/2.0/specification/2.0 diff --git a/doc/gltf2-loader.png b/doc/gltf2-loader.png new file mode 100644 index 0000000000000000000000000000000000000000..a1207e15580fcd90a15f6f9fcac8999f81fa5667 GIT binary patch literal 14364 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 b#}&tx{ac4pCm)`FpGa~t%F@-6pTGVeg-3*5 literal 0 HcmV?d00001