Fix material split for obj import
This commit is contained in:
@@ -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++;
|
||||
|
||||
Reference in New Issue
Block a user