Skip to content

Commit 77857a7

Browse files
committed
fix ByVertice handling of UVs and colors in FBX importer
1 parent b32131d commit 77857a7

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

iqm.cpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2716,7 +2716,17 @@ namespace fbx
27162716
n->lastvert = epositions.length();
27172717
n->numverts = verts.length()/3;
27182718

2719-
if(uvidxs.empty()) for(int i = 0; i + 1 < uvs.length(); i += 2) etexcoords.add(Vec4(uvs[i], uvs[i+1], 0, 0));
2719+
if(uvidxs.empty())
2720+
{
2721+
if(polyidxs.length() && uvs.length()/2 == verts.length()/3) loopv(polyidxs)
2722+
{
2723+
int idx = polyidxs[i];
2724+
if(idx < 0) idx = -(idx+1);
2725+
idx *= 2;
2726+
etexcoords.add(Vec4(uvs[idx], 1-uvs[idx+1], 0, 0));
2727+
}
2728+
else for(int i = 0; i + 1 < uvs.length(); i += 2) etexcoords.add(Vec4(uvs[i], 1-uvs[i+1], 0, 0));
2729+
}
27202730
else loopv(uvidxs)
27212731
{
27222732
int idx = 2*uvidxs[i];
@@ -2732,7 +2742,17 @@ namespace fbx
27322742
}
27332743
else for(int i = 0; i + 2 < norms.length(); i += 3) enormals.add(Vec3(norms[i], norms[i+1], norms[i+2]));
27342744

2735-
if(coloridxs.empty()) for(int i = 0; i + 3 < colors.length(); i += 4) ecolors.add(Vec4(colors[i], colors[i+1], colors[i+2], colors[i+3]));
2745+
if(coloridxs.empty())
2746+
{
2747+
if(polyidxs.length() && colors.length()/4 == verts.length()/3) loopv(polyidxs)
2748+
{
2749+
int idx = polyidxs[i];
2750+
if(idx < 0) idx = -(idx+1);
2751+
idx *= 4;
2752+
ecolors.add(Vec4(colors[idx], colors[idx+1], colors[idx+2], colors[idx+3]));
2753+
}
2754+
else for(int i = 0; i + 3 < colors.length(); i += 4) ecolors.add(Vec4(colors[i], colors[i+1], colors[i+2], colors[i+3]));
2755+
}
27362756
else loopv(coloridxs)
27372757
{
27382758
int idx = 4*coloridxs[i];

0 commit comments

Comments
 (0)