Add vertex color support to OBJ importer
This commit is contained in:
parent
adee8cfee6
commit
ab8792cc7b
|
@ -214,6 +214,7 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_
|
||||||
Vector<Vector3> vertices;
|
Vector<Vector3> vertices;
|
||||||
Vector<Vector3> normals;
|
Vector<Vector3> normals;
|
||||||
Vector<Vector2> uvs;
|
Vector<Vector2> uvs;
|
||||||
|
Vector<Color> colors;
|
||||||
String name;
|
String name;
|
||||||
|
|
||||||
Map<String, Map<String, Ref<SpatialMaterial>>> material_map;
|
Map<String, Map<String, Ref<SpatialMaterial>>> material_map;
|
||||||
|
@ -244,6 +245,19 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_
|
||||||
vtx.y = v[2].to_float() * scale_mesh.y + offset_mesh.y;
|
vtx.y = v[2].to_float() * scale_mesh.y + offset_mesh.y;
|
||||||
vtx.z = v[3].to_float() * scale_mesh.z + offset_mesh.z;
|
vtx.z = v[3].to_float() * scale_mesh.z + offset_mesh.z;
|
||||||
vertices.push_back(vtx);
|
vertices.push_back(vtx);
|
||||||
|
//vertex colors
|
||||||
|
if (v.size() >= 7) {
|
||||||
|
while (colors.size() < vertices.size() - 1) {
|
||||||
|
colors.push_back(Color(1.0, 1.0, 1.0));
|
||||||
|
}
|
||||||
|
Color c;
|
||||||
|
c.r = v[4].to_float();
|
||||||
|
c.g = v[5].to_float();
|
||||||
|
c.b = v[6].to_float();
|
||||||
|
colors.push_back(c);
|
||||||
|
} else if (!colors.empty()) {
|
||||||
|
colors.push_back(Color(1.0, 1.0, 1.0));
|
||||||
|
}
|
||||||
} else if (l.begins_with("vt ")) {
|
} else if (l.begins_with("vt ")) {
|
||||||
//uv
|
//uv
|
||||||
Vector<String> v = l.split(" ", false);
|
Vector<String> v = l.split(" ", false);
|
||||||
|
@ -312,6 +326,9 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_
|
||||||
ERR_FAIL_INDEX_V(vtx, vertices.size(), ERR_FILE_CORRUPT);
|
ERR_FAIL_INDEX_V(vtx, vertices.size(), ERR_FILE_CORRUPT);
|
||||||
|
|
||||||
Vector3 vertex = vertices[vtx];
|
Vector3 vertex = vertices[vtx];
|
||||||
|
if (!colors.empty()) {
|
||||||
|
surf_tool->add_color(colors[vtx]);
|
||||||
|
}
|
||||||
//if (weld_vertices)
|
//if (weld_vertices)
|
||||||
// vertex.snap(Vector3(weld_tolerance, weld_tolerance, weld_tolerance));
|
// vertex.snap(Vector3(weld_tolerance, weld_tolerance, weld_tolerance));
|
||||||
surf_tool->add_vertex(vertex);
|
surf_tool->add_vertex(vertex);
|
||||||
|
@ -344,7 +361,11 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_
|
||||||
print_verbose("OBJ: Current material " + current_material + " has " + itos(material_map.has(current_material_library) && material_map[current_material_library].has(current_material)));
|
print_verbose("OBJ: Current material " + current_material + " has " + itos(material_map.has(current_material_library) && material_map[current_material_library].has(current_material)));
|
||||||
|
|
||||||
if (material_map.has(current_material_library) && material_map[current_material_library].has(current_material)) {
|
if (material_map.has(current_material_library) && material_map[current_material_library].has(current_material)) {
|
||||||
surf_tool->set_material(material_map[current_material_library][current_material]);
|
Ref<SpatialMaterial> &material = material_map[current_material_library][current_material];
|
||||||
|
if (!colors.empty()) {
|
||||||
|
material->set_flag(SpatialMaterial::FLAG_SRGB_VERTEX_COLOR, true);
|
||||||
|
}
|
||||||
|
surf_tool->set_material(material);
|
||||||
}
|
}
|
||||||
|
|
||||||
mesh = surf_tool->commit(mesh, p_compress_flags);
|
mesh = surf_tool->commit(mesh, p_compress_flags);
|
||||||
|
|
Loading…
Reference in New Issue