cgltf
cgltf copied to clipboard
Create example of how to create a gltf file from scratch
I'm creating my own mesh and I would like to save the result into a gltf file. There are no examples or documentation about how to do this.
Yes this would be useful since the test we have currently doesn't create one from scratch.
One strategy is to declare a lot of things on the stack, e.g.:
cgltf_image images[3] = {
{(char*)"tile color", (char*)"tile_color.png"},
{(char*)"tile orm", (char*)"tile_orm.png"},
{(char*)"tile normal", (char*)"tile_normal.png"},
};
cgltf_image& color_image = images[0];
cgltf_image& orm_image = images[1];
cgltf_image& normal_image = images[2];
cgltf_texture textures[3] = {
{(char*)"tile color", &color_image},
{(char*)"tile orm", &orm_image},
{(char*)"tile normal", &normal_image},
};
cgltf_texture& color_texture = textures[0];
cgltf_texture& orm_texture = textures[1];
cgltf_texture& normal_texture = textures[2];
cgltf_material materials[4] = {};
cgltf_material& tile_bottom_material = materials[0];
cgltf_material& tile_top_material = materials[1];
cgltf_material& tile_glow_material = materials[2];
cgltf_material& player_material = materials[3];
tile_top_material.name = (char*)"tile top";
tile_top_material.alpha_cutoff = 0.5f;
tile_top_material.has_pbr_metallic_roughness = true;
tile_top_material.pbr_metallic_roughness = {
.base_color_texture = {&color_texture, 0, 1.0f},
.metallic_roughness_texture = {&orm_texture, 0, 1.0f},
.base_color_factor = {1, 1, 1, 1},
.metallic_factor = 1,
.roughness_factor = 1,
};
tile_top_material.occlusion_texture = {&orm_texture, 0, 1.0f};
tile_top_material.normal_texture = {&normal_texture, 0, 1.0f};
etc...
Here's a more complete example of writing a gltf from scratch: https://github.com/prideout/par/blob/master/test/test_octasphere.cpp
We could add a pointer to this from the README, or we could copy it into a unit test. I'll defer to @jkuhlmann on how best to proceed.