mirror of
https://git.mirrors.martin98.com/https://github.com/syoyo/tinygltf.git
synced 2025-08-02 19:00:39 +08:00
77 lines
1.9 KiB
C++
77 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include <vector>
|
|
#include <map>
|
|
|
|
namespace example {
|
|
|
|
// TODO(syoyo): Support sparse accessor(sparse vertex attribute).
|
|
// TODO(syoyo): Support more data type
|
|
struct VertexAttrib {
|
|
std::string name;
|
|
|
|
// Value are converted to float type.
|
|
std::vector<float> data;
|
|
|
|
// Corresponding info in binary data
|
|
int data_type; // e.g. TINYGLTF_TYPE_VEC2
|
|
int component_type; // storage type. e.g.
|
|
// TINYGLTF_COMPONENT_TYPE_UNSIGNED_INT
|
|
uint64_t buffer_offset{0};
|
|
size_t buffer_length{0};
|
|
|
|
// Optional.
|
|
std::vector<double> minValues;
|
|
std::vector<double> maxValues;
|
|
|
|
size_t numElements() const;
|
|
|
|
};
|
|
|
|
struct MeshPrim {
|
|
std::string name;
|
|
int32_t id{-1};
|
|
|
|
int mode; // e.g. TRIANGLES
|
|
|
|
VertexAttrib position; // vec3
|
|
VertexAttrib normal; // vec3
|
|
VertexAttrib tangent; // vec4
|
|
VertexAttrib color; // vec3 or vec4
|
|
std::map<int, VertexAttrib> texcoords; // <slot, attrib> vec2
|
|
std::map<int, VertexAttrib> weights; // <slot, attrib> vec4
|
|
std::map<int, VertexAttrib>
|
|
joints; // <slot, attrib> store data as float type
|
|
|
|
|
|
// min/max of index value. -1 = undef
|
|
int indices_min{-1};
|
|
int indices_max{-1};
|
|
int indices_type{-1}; // storage type(componentType) of `indices`.
|
|
std::vector<uint32_t> indices; // vertex indices
|
|
};
|
|
|
|
///
|
|
/// Save MeshPrim as wavefront .obj
|
|
///
|
|
bool SaveAsObjMesh(const std::string &filename, const MeshPrim &mesh);
|
|
|
|
///
|
|
/// Save MeshPrim as glTF mesh
|
|
///
|
|
bool SaveAsGLTFMesh(const std::string &filename, const MeshPrim &mesh);
|
|
|
|
///
|
|
/// Loads .obj and convert to MeshPrim
|
|
///
|
|
/// @param[in] facevarying Construct mesh with facevarying vertex layout(default false)
|
|
///
|
|
bool LoadObjMesh(const std::string &filename, bool facevarying, MeshPrim *mesh);
|
|
|
|
///
|
|
/// Print MeshPrim datra
|
|
///
|
|
void PrintMeshPrim(const MeshPrim &mesh);
|
|
|
|
} // namespace example
|