Microsoft glTF-SDK 开源项目教程
1. 项目的目录结构及介绍
目录结构
glTF-SDK/
├── CMakeLists.txt
├── LICENSE
├── README.md
├── include/
│ └── Microsoft/
│ └── glTFSDK/
│ ├── Attributes.h
│ ├── Client.h
│ ├── Deserializer.h
│ ├── Document.h
│ ├── Extras.h
│ ├── GLTFResourceReader.h
│ ├── GLBResourceReader.h
│ ├── IResourceReader.h
│ ├── JSONReader.h
│ ├── Metadata.h
│ ├── Schema.h
│ ├── SchemaValidation.h
│ ├── Serializer.h
│ ├── SynchronousResourceReader.h
│ ├── URI.h
│ ├── Utils.h
│ └── Version.h
├── src/
│ ├── Attributes.cpp
│ ├── Client.cpp
│ ├── Deserializer.cpp
│ ├── Document.cpp
│ ├── Extras.cpp
│ ├── GLTFResourceReader.cpp
│ ├── GLBResourceReader.cpp
│ ├── IResourceReader.cpp
│ ├── JSONReader.cpp
│ ├── Metadata.cpp
│ ├── Schema.cpp
│ ├── SchemaValidation.cpp
│ ├── Serializer.cpp
│ ├── SynchronousResourceReader.cpp
│ ├── URI.cpp
│ ├── Utils.cpp
│ └── Version.cpp
├── tests/
│ ├── CMakeLists.txt
│ ├── TestAttributes.cpp
│ ├── TestClient.cpp
│ ├── TestDeserializer.cpp
│ ├── TestDocument.cpp
│ ├── TestExtras.cpp
│ ├── TestGLTFResourceReader.cpp
│ ├── TestGLBResourceReader.cpp
│ ├── TestIResourceReader.cpp
│ ├── TestJSONReader.cpp
│ ├── TestMetadata.cpp
│ ├── TestSchema.cpp
│ ├── TestSchemaValidation.cpp
│ ├── TestSerializer.cpp
│ ├── TestSynchronousResourceReader.cpp
│ ├── TestURI.cpp
│ ├── TestUtils.cpp
│ └── TestVersion.cpp
└── tools/
├── CMakeLists.txt
├── glTFSDKTool.cpp
└── glTFSDKTool.h
目录介绍
- include/: 包含项目的头文件,定义了SDK的主要接口和类。
- src/: 包含项目的源文件,实现了头文件中定义的接口和类。
- tests/: 包含项目的测试文件,用于验证SDK的功能。
- tools/: 包含一些实用工具,例如命令行工具。
2. 项目的启动文件介绍
启动文件
项目的启动文件通常是 glTFSDKTool.cpp
,位于 tools/
目录下。这个文件实现了一个命令行工具,用于加载和处理 glTF 文件。
启动文件介绍
// tools/glTFSDKTool.cpp
#include "glTFSDKTool.h"
#include <Microsoft/glTFSDK/Document.h>
#include <Microsoft/glTFSDK/GLTFResourceReader.h>
#include <Microsoft/glTFSDK/GLBResourceReader.h>
#include <Microsoft/glTFSDK/Deserialize.h>
#include <iostream>
int main(int argc, char** argv)
{
if (argc < 2)
{
std::cerr << "Usage: glTFSDKTool <gltf/glb file>" << std::endl;
return 1;
}
std::string filePath = argv[1];
std::ifstream fileStream(filePath, std::ios::binary);
if (!fileStream)
{
std::cerr << "Failed to open file: " << filePath << std::endl;
return 1;
}
std::string fileData((std::istreambuf_iterator<char>(fileStream)), std::istreambuf_iterator<char>());
Microsoft::glTF::Document document;
std::unique_ptr<Microsoft::glTF::IStreamReader> streamReader = std::make_unique<Microsoft::glTF::StdIStreamReader>();
std::unique_ptr<Microsoft::glTF::IResourceReader> resourceReader;
if (filePath.substr(filePath.