diff --git a/interface/resources/qml/js/Utils.jsc b/interface/resources/qml/js/Utils.jsc index 8da68e4e19..0e4b04d46e 100644 Binary files a/interface/resources/qml/js/Utils.jsc and b/interface/resources/qml/js/Utils.jsc differ diff --git a/libraries/fbx/src/OBJReader.cpp b/libraries/fbx/src/OBJReader.cpp index d6955a6945..73c0f07fa6 100644 --- a/libraries/fbx/src/OBJReader.cpp +++ b/libraries/fbx/src/OBJReader.cpp @@ -262,7 +262,8 @@ void OBJReader::parseMaterialLibrary(QIODevice* device) { currentMaterial.emissiveColor << " diffuse texture:" << currentMaterial.diffuseTextureFilename << " specular texture:" << currentMaterial.specularTextureFilename << " emissive texture:" << - currentMaterial.emissiveTextureFilename; + currentMaterial.emissiveTextureFilename << " bump texture:" << + currentMaterial.bumpTextureFilename; #endif return; } @@ -280,6 +281,7 @@ void OBJReader::parseMaterialLibrary(QIODevice* device) { currentMaterial.diffuseTextureFilename = ""; currentMaterial.emissiveTextureFilename = ""; currentMaterial.specularTextureFilename = ""; + currentMaterial.bumpTextureFilename = ""; } else if (token == "Ns") { currentMaterial.shininess = tokenizer.getFloat(); } else if (token == "Ni") { @@ -300,8 +302,9 @@ void OBJReader::parseMaterialLibrary(QIODevice* device) { currentMaterial.emissiveColor = tokenizer.getVec3(); } else if (token == "Ks") { currentMaterial.specularColor = tokenizer.getVec3(); - } else if ((token == "map_Kd") || (token == "map_Ke") || (token == "map_Ks")) { - QByteArray filename = QString(tokenizer.getLineAsDatum()).toUtf8(); + } else if ((token == "map_Kd") || (token == "map_Ke") || (token == "map_Ks") || (token == "map_bump")) { + QByteArray textureLine = QString(tokenizer.getLineAsDatum()).toUtf8(); + QByteArray filename = textureLine; // TODO: parse texture options and filename from line if (filename.endsWith(".tga")) { #ifdef WANT_DEBUG qCDebug(modelformat) << "OBJ Reader WARNING: currently ignoring tga texture " << filename << " in " << _url; @@ -314,6 +317,8 @@ void OBJReader::parseMaterialLibrary(QIODevice* device) { currentMaterial.emissiveTextureFilename = filename; } else if( token == "map_Ks" ) { currentMaterial.specularTextureFilename = filename; + } else if (token == "map_bump") { + currentMaterial.bumpTextureFilename = filename; } } } @@ -780,6 +785,10 @@ FBXGeometry* OBJReader::readOBJ(QByteArray& model, const QVariantHash& mapping, if (!objMaterial.emissiveTextureFilename.isEmpty()) { fbxMaterial.emissiveTexture.filename = objMaterial.emissiveTextureFilename; } + if (!objMaterial.bumpTextureFilename.isEmpty()) { + fbxMaterial.normalTexture.filename = objMaterial.bumpTextureFilename; + fbxMaterial.normalTexture.isBumpmap = true; + } modelMaterial->setEmissive(fbxMaterial.emissiveColor); modelMaterial->setAlbedo(fbxMaterial.diffuseColor); diff --git a/libraries/fbx/src/OBJReader.h b/libraries/fbx/src/OBJReader.h index f0852c9c22..d0bbd539e9 100644 --- a/libraries/fbx/src/OBJReader.h +++ b/libraries/fbx/src/OBJReader.h @@ -60,6 +60,7 @@ public: QByteArray diffuseTextureFilename; QByteArray specularTextureFilename; QByteArray emissiveTextureFilename; + QByteArray bumpTextureFilename; bool used { false }; bool userSpecifiesUV { false }; OBJMaterial() : shininess(0.0f), opacity(1.0f), diffuseColor(0.9f), specularColor(0.9f), emissiveColor(0.0f) {}