Merge pull request #3582 from makitsune/fix-gltf-vertex-colors
Fix glTF vertex colors with types other than floatpull/3594/head^2
commit
71e8c1001e
|
@ -383,6 +383,22 @@ static inline bool CheckValidFacesIndices(aiFace *faces, unsigned nFaces, unsign
|
||||||
}
|
}
|
||||||
#endif // ASSIMP_BUILD_DEBUG
|
#endif // ASSIMP_BUILD_DEBUG
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
aiColor4D* GetVertexColorsForType(glTF2::Ref<glTF2::Accessor> input) {
|
||||||
|
float max = std::numeric_limits<T>::max();
|
||||||
|
aiColor4t<T>* colors;
|
||||||
|
input->ExtractData(colors);
|
||||||
|
auto output = new aiColor4D[input->count];
|
||||||
|
for (size_t i = 0; i < input->count; i++) {
|
||||||
|
output[i] = aiColor4D(
|
||||||
|
colors[i].r / max, colors[i].g / max,
|
||||||
|
colors[i].b / max, colors[i].a / max
|
||||||
|
);
|
||||||
|
}
|
||||||
|
delete[] colors;
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
void glTF2Importer::ImportMeshes(glTF2::Asset &r) {
|
void glTF2Importer::ImportMeshes(glTF2::Asset &r) {
|
||||||
ASSIMP_LOG_DEBUG_F("Importing ", r.meshes.Size(), " meshes");
|
ASSIMP_LOG_DEBUG_F("Importing ", r.meshes.Size(), " meshes");
|
||||||
std::vector<std::unique_ptr<aiMesh>> meshes;
|
std::vector<std::unique_ptr<aiMesh>> meshes;
|
||||||
|
@ -463,7 +479,17 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) {
|
||||||
"\" does not match the vertex count");
|
"\" does not match the vertex count");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
attr.color[c]->ExtractData(aim->mColors[c]);
|
|
||||||
|
auto componentType = attr.color[c]->componentType;
|
||||||
|
if (componentType == glTF2::ComponentType_FLOAT) {
|
||||||
|
attr.color[c]->ExtractData(aim->mColors[c]);
|
||||||
|
} else {
|
||||||
|
if (componentType == glTF2::ComponentType_UNSIGNED_BYTE) {
|
||||||
|
aim->mColors[c] = GetVertexColorsForType<unsigned char>(attr.color[c]);
|
||||||
|
} else if (componentType == glTF2::ComponentType_UNSIGNED_SHORT) {
|
||||||
|
aim->mColors[c] = GetVertexColorsForType<unsigned short>(attr.color[c]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (size_t tc = 0; tc < attr.texcoord.size() && tc < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++tc) {
|
for (size_t tc = 0; tc < attr.texcoord.size() && tc < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++tc) {
|
||||||
if (!attr.texcoord[tc]) {
|
if (!attr.texcoord[tc]) {
|
||||||
|
|
Loading…
Reference in New Issue