Skip to content

Model importer in the tutorial doesn't work if the model has 2 vertices in the same place in the UV map #157

@Ikbenmathijs

Description

@Ikbenmathijs

tobj by default also uses an index array for the texture coordinates aswell, I rewrote the model importer to account for it

for model in &models {
        for (i, index) in model.mesh.indices.iter().enumerate() {
            let pos_offset = (3 * index) as usize;
            let tex_coord_offset = (2 * model.mesh.texcoord_indices[i]) as usize;
            let normal_offset = (3 * model.mesh.normal_indices[i]) as usize;



            let vertex = Vertex {
                pos: glm::vec3(
                    model.mesh.positions[pos_offset],
                    model.mesh.positions[pos_offset + 1],
                    model.mesh.positions[pos_offset + 2]
                ),
                color: glm::vec3(1.0, 0.0, 0.0),
                tex_coord: glm::vec2(
                    model.mesh.texcoords[tex_coord_offset],
                    1.0 - model.mesh.texcoords[tex_coord_offset + 1]
                ),
                normal: glm::vec3(
                    model.mesh.normals[normal_offset],
                    model.mesh.normals[normal_offset + 1],
                    model.mesh.normals[normal_offset + 2]
                )
            };

            if let Some(index) = unique_verticies.get(&vertex) {
                data.indicies.push(*index);
            } else {
                let index = data.vertices.len();
                data.vertices.push(vertex);
                unique_verticies.insert(vertex, index as u32);
                data.indicies.push(index as u32);
            }

        }
    }

I discovered this because the normals wouldn't import correctly with the sample model when I tried to add that later on, since the normals also use an index array. The viking room model doesn't have 2 vertices in the same place in the UV map, but I've tried other models and it didn't work with that

Metadata

Metadata

Assignees

No one assigned

    Labels

    tutorialAn issue relating to the tutorial

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions