From a9df8a6b2955a3e5d5e5942c69b716f2c4e289b2 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Wed, 23 Oct 2013 15:56:09 -0700 Subject: [PATCH] Partial fix for textures in exports from 3D Studio Max. --- interface/src/renderer/FBXReader.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/interface/src/renderer/FBXReader.cpp b/interface/src/renderer/FBXReader.cpp index fb58b007e1..e899d847af 100644 --- a/interface/src/renderer/FBXReader.cpp +++ b/interface/src/renderer/FBXReader.cpp @@ -902,11 +902,12 @@ FBXGeometry extractFBXGeometry(const FBXNode& node, const QVariantHash& mapping) foreach (const FBXNode& connection, child.children) { if (connection.name == "C" || connection.name == "Connect") { if (connection.properties.at(0) == "OP") { - if (connection.properties.at(3) == "DiffuseColor") { + QByteArray type = connection.properties.at(3).toByteArray().toLower(); + if (type.contains("diffuse")) { diffuseTextures.insert(connection.properties.at(2).toString(), connection.properties.at(1).toString()); - } else if (connection.properties.at(3) == "Bump") { + } else if (type.contains("bump")) { bumpTextures.insert(connection.properties.at(2).toString(), connection.properties.at(1).toString()); } @@ -1035,6 +1036,13 @@ FBXGeometry extractFBXGeometry(const FBXNode& node, const QVariantHash& mapping) QString diffuseTextureID = diffuseTextures.value(childID); if (!diffuseTextureID.isNull()) { part.diffuseFilename = textureFilenames.value(diffuseTextureID); + + // FBX files generated by 3DSMax have an intermediate texture parent, apparently + foreach (const QString& childTextureID, childMap.values(diffuseTextureID)) { + if (textureFilenames.contains(childTextureID)) { + part.diffuseFilename = textureFilenames.value(childTextureID); + } + } } QString bumpTextureID = bumpTextures.value(childID); if (!bumpTextureID.isNull()) {