diff --git a/readerwriter/LoadSceneGLTF.cpp b/readerwriter/LoadSceneGLTF.cpp index 6af8f9694482e03502e9b7ac8933a49c867cb638..ea7600602dbb04ca1589adfaf1233d65ca1ddc73 100644 --- a/readerwriter/LoadSceneGLTF.cpp +++ b/readerwriter/LoadSceneGLTF.cpp @@ -793,10 +793,29 @@ namespace osgVerse } if (normalID >= 0) createTexture(ss, 1, uniformNames[1], _modelDef.textures[normalID]); - if (roughnessID >= 0) createTexture(ss, 3, uniformNames[3], _modelDef.textures[roughnessID]); + if (roughnessID >= 0) + createTexture(ss, 3, uniformNames[3], _modelDef.textures[roughnessID]); + else + { + osg::Texture2D* tex2D = createDefaultTextureForColor(osg::Vec4( + 1.0, material.pbrMetallicRoughness.roughnessFactor, + material.pbrMetallicRoughness.metallicFactor, 1.0)); + if (tex2D) ss->setTextureAttributeAndModes(3, tex2D); + } if (occlusionID >= 0) createTexture(ss, 4, uniformNames[4], _modelDef.textures[occlusionID]); - if (emissiveID >= 0) createTexture(ss, 5, uniformNames[5], _modelDef.textures[emissiveID]); - + if (emissiveID >= 0) + createTexture(ss, 5, uniformNames[5], _modelDef.textures[emissiveID]); + else + { + osg::Texture2D* tex2D = createDefaultTextureForColor(osg::Vec4( + material.emissiveFactor[0], material.emissiveFactor[1], + material.emissiveFactor[2], 1.0)); + if (tex2D) ss->setTextureAttributeAndModes(5, tex2D); + } + if (material.doubleSided) + ss->setMode(GL_CULL_FACE, osg::StateAttribute::OFF); + else + ss->setMode(GL_CULL_FACE, osg::StateAttribute::ON); if (material.alphaMode.compare("BLEND") == 0) ss->setRenderingHint(osg::StateSet::TRANSPARENT_BIN); else