//-------------------------------------------------------------- // get filename valued option void mgOptionsFile::getFileName( const char* name, const char* relativeTo, const char* defaultValue, mgString& fileName) const { mgString key(name); key.makeLower(); mgString value(defaultValue); m_options.lookup(key, value); mgString relativeFileName(relativeTo); mgOSFixFileName(relativeFileName); // handle ;-delimeted pairs of filenames we use for RGB+alpha images int semi = value.find(0, ";"); if (semi != -1) { mgString rgbName; value.substring(rgbName, 0, semi); value.deleteAt(0, semi+1); mgOSResolveRelativeName(relativeFileName, rgbName, fileName); fileName += ';'; mgString alphaName; mgOSResolveRelativeName(relativeFileName, value, alphaName); fileName += alphaName; } else { mgOSResolveRelativeName(relativeFileName, value, fileName); } }
babylon_vector3 extractColorAndTexture(const FbxPropertyT<FbxDouble3>& colorRGB, const FbxPropertyT<FbxDouble>& factorProp, std::shared_ptr<babylon_texture>& oTexture, TextureFormat desiredTextureFormat, const std::wstring& srcDir, const std::wstring& outdir){ babylon_vector3 color(0,0,0); if (colorRGB.IsValid()){ auto ambient = colorRGB.Get(); float factor = 1; if (factorProp.IsValid()){ factor = (float) factorProp.Get(); } color.x = (float) (ambient[0] * factor); color.y = (float) (ambient[1] * factor); color.z = (float) (ambient[2] * factor); auto texture = colorRGB.GetSrcObject<FbxFileTexture>(); if (texture){ std::string relativeFileName(texture->GetRelativeFileName()); std::wstring wsourceFile(srcDir); if (*wsourceFile.rbegin() != L'\\'){ wsourceFile.push_back(L'\\'); } wsourceFile.append(std::begin(relativeFileName), std::end(relativeFileName)); // check if file exists DWORD attrib = GetFileAttributes(wsourceFile.c_str()); if (attrib != 0xFFFFFFFF) { oTexture.reset(new babylon_texture()); std::transform(relativeFileName.begin(), relativeFileName.end(), relativeFileName.begin(), [](char c){return (char) tolower(c); }); oTexture->name = relativeFileName; oTexture->hasAlpha = texture->GetAlphaSource() != FbxTexture::eNone; TextureFormat sourceTextureFormat = getTextureFormatFromFileName(relativeFileName); if (sourceTextureFormat == desiredTextureFormat){ std::wstring wdestFile(outdir); if (*wdestFile.rbegin() != L'\\'){ wdestFile.push_back(L'\\'); } wdestFile.append(std::wstring(relativeFileName.begin(), relativeFileName.end())); CopyFile(wsourceFile.c_str(), wdestFile.c_str(), true); } else{ changeFileNameForFormat(relativeFileName, desiredTextureFormat); oTexture->name = relativeFileName; std::wstring wdestFile(outdir); if (*wdestFile.rbegin() != L'\\'){ wdestFile.push_back(L'\\'); } wdestFile.append(std::wstring(relativeFileName.begin(), relativeFileName.end())); convertTexture(wsourceFile, wdestFile, sourceTextureFormat, desiredTextureFormat, oTexture->hasAlpha); } } } } return color; }