我正在加载 GLTF 模型。然后,我需要用 MeshPhysicalMaterial (MPM) 替换某些网格体的材质。该 MPM 材质具有来自我之前加载的纹理的法线贴图。更换材质时,所有使用新材质的网格都是黑色的。如果我替换材质但不添加法线贴图,它就可以正常工作。
如果我在新对象上添加 MPM 材质,它也会按预期工作。我想我需要将某些内容标记为需要更新,但我不确定是什么。
我尝试过以下方法:
material.vertexColors = parseInt(material.vertexColors); //Ensure number
material.side = parseInt(material.side); //Ensure number
material.needsUpdate = true;
geometry.attributes.position.needsUpdate = true;
geometry.attributes.normal.needsUpdate = true;
if (geometry.attributes.color) {
geometry.attributes.color.needsUpdate = true;
}
geometry.verticesNeedUpdate = true;
geometry.elementsNeedUpdate = true;
geometry.morphTargetsNeedUpdate = true;
geometry.uvsNeedUpdate = true;
geometry.normalsNeedUpdate = true;
geometry.colorsNeedUpdate = true;
geometry.tangentsNeedUpdate = true;
但似乎没有任何作用。任何想法将非常感激。
在 r.160 上,我无法显示加载的法线贴图,直到加载法线贴图后执行以下操作。
normalMap.wrapS = THREE.RepeatWrapping;
normalMap.wrapT = THREE.RepeatWrapping;
normalMap.repeat.set(0.2, 0.2);
material.normalMap = normalMap;
material.normalMapType = THREE.ObjectSpaceNormalMap;
我不知道这是否适用于你的情况,但这对我有帮助。