Merge materials when importing obj mesh
This commit is contained in:
@@ -27,11 +27,55 @@ class ImportObj {
|
||||
}
|
||||
}
|
||||
else {
|
||||
var parts: Array<ObjParser> = [];
|
||||
var obj = new ObjParser(b);
|
||||
ImportMesh.makeMesh(obj, path);
|
||||
parts.push(obj);
|
||||
while (obj.hasNext) {
|
||||
obj = new ObjParser(b, obj.pos);
|
||||
ImportMesh.addMesh(obj);
|
||||
parts.push(obj);
|
||||
}
|
||||
if (Context.splitBy == SplitMaterial) {
|
||||
// Merge to single object per material
|
||||
for (i in 0...parts.length) {
|
||||
var j = i + 1;
|
||||
while (j < parts.length) {
|
||||
if (parts[i].name == parts[j].name) {
|
||||
var posa0 = parts[i].posa;
|
||||
var posa1 = parts[j].posa;
|
||||
var nora0 = parts[i].nora;
|
||||
var nora1 = parts[j].nora;
|
||||
var texa0 = parts[i].texa != null ? parts[i].texa : null;
|
||||
var texa1 = parts[j].texa != null ? parts[j].texa : null;
|
||||
var inda0 = parts[i].inda;
|
||||
var inda1 = parts[j].inda;
|
||||
var posa = new kha.arrays.Int16Array(posa0.length + posa1.length);
|
||||
var nora = new kha.arrays.Int16Array(nora0.length + nora1.length);
|
||||
var texa = (texa0 != null && texa1 != null) ? new kha.arrays.Int16Array(texa0.length + texa1.length) : null;
|
||||
var inda = new kha.arrays.Uint32Array(inda0.length + inda1.length);
|
||||
var voff = Std.int(posa0.length / 4);
|
||||
untyped __js__("posa.set(posa0)");
|
||||
untyped __js__("posa.set(posa1, posa0.length)");
|
||||
untyped __js__("nora.set(nora0)");
|
||||
untyped __js__("nora.set(nora1, nora0.length)");
|
||||
if (texa != null) {
|
||||
untyped __js__("texa.set(texa0)");
|
||||
untyped __js__("texa.set(texa1, texa0.length)");
|
||||
}
|
||||
untyped __js__("inda.set(inda0)");
|
||||
for (k in 0...inda1.length) inda[k + inda0.length] = inda1[k] + voff;
|
||||
parts[i].posa = posa;
|
||||
parts[i].nora = nora;
|
||||
parts[i].texa = texa;
|
||||
parts[i].inda = inda;
|
||||
parts.splice(j, 1);
|
||||
}
|
||||
else j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
ImportMesh.makeMesh(parts[0], path);
|
||||
for (i in 1...parts.length) {
|
||||
ImportMesh.addMesh(parts[i]);
|
||||
}
|
||||
}
|
||||
Data.deleteBlob(path);
|
||||
|
||||
Reference in New Issue
Block a user