Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create example of how to create a gltf file from scratch #138

Open
dov opened this issue Feb 22, 2021 · 2 comments
Open

Create example of how to create a gltf file from scratch #138

dov opened this issue Feb 22, 2021 · 2 comments

Comments

@dov
Copy link

dov commented Feb 22, 2021

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.

@prideout
Copy link
Contributor

prideout commented Feb 22, 2021

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...

@prideout
Copy link
Contributor

prideout commented Mar 7, 2021

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants