Fix material split for obj import

This commit is contained in:
luboslenco
2021-01-17 15:50:42 +01:00
parent 880ee49d43
commit b6f33c7052
+28 -3
View File
@@ -56,13 +56,37 @@ class ImportObj {
texa1 = parts[j].texa != null ? parts[j].texa : null;
inda0 = parts[i].inda;
inda1 = parts[j].inda;
var voff = Std.int(posa0.length / 4);
// Repack merged positions
var posa32 = new kha.arrays.Float32Array(Std.int(posa0.length / 4) * 3 + Std.int(posa1.length / 4) * 3);
for (k in 0...Std.int(posa0.length / 4)) {
posa32[k * 3 ] = posa0[k * 4 ] / 32767 * parts[i].scalePos;
posa32[k * 3 + 1] = posa0[k * 4 + 1] / 32767 * parts[i].scalePos;
posa32[k * 3 + 2] = posa0[k * 4 + 2] / 32767 * parts[i].scalePos;
}
for (k in 0...Std.int(posa1.length / 4)) {
posa32[voff * 3 + k * 3 ] = posa1[k * 4 ] / 32767 * parts[j].scalePos;
posa32[voff * 3 + k * 3 + 1] = posa1[k * 4 + 1] / 32767 * parts[j].scalePos;
posa32[voff * 3 + k * 3 + 2] = posa1[k * 4 + 2] / 32767 * parts[j].scalePos;
}
var scalePos = 0.0;
for (k in 0...posa32.length) {
var f = Math.abs(posa32[k]);
if (scalePos < f) scalePos = f;
}
var inv = 32767 * (1 / scalePos);
var posa = new kha.arrays.Int16Array(posa0.length + posa1.length);
for (k in 0...Std.int(posa.length / 4)) {
posa[k * 4 ] = Std.int(posa32[k * 3 ] * inv);
posa[k * 4 + 1] = Std.int(posa32[k * 3 + 1] * inv);
posa[k * 4 + 2] = Std.int(posa32[k * 3 + 2] * inv);
}
for (k in 0...Std.int(posa0.length / 4)) posa[k * 4 + 3] = posa0[k * 4 + 3];
for (k in 0...Std.int(posa1.length / 4)) posa[posa0.length + k * 4 + 3] = posa1[k * 4 + 3];
// Merge normals and uvs
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);
js.Syntax.code("posa.set(posa0)");
js.Syntax.code("posa.set(posa1, posa0.length)");
js.Syntax.code("nora.set(nora0)");
js.Syntax.code("nora.set(nora1, nora0.length)");
if (texa != null) {
@@ -75,6 +99,7 @@ class ImportObj {
parts[i].nora = nora;
parts[i].texa = texa;
parts[i].inda = inda;
parts[i].scalePos = scalePos;
parts.splice(j, 1);
}
else j++;