这是我的问题:
我想将特定材质应用于具有Three.js的obj网格的子节点。
但似乎材料被应用于父网格而不是子网格...我尝试了不同的东西,但每次应用的最后一个材料设置为父...我做错了吗?也许我没有使用正确的方法,任何想法?
/* material */
material = new THREE.MeshLambertMaterial({
color: 0x9B9B9B,
emissive: 0x050505,
emissiveIntensity: 0.1
});
firstChildMaterial = new THREE.MeshLambertMaterial({
color: 0x9693057,
emissive: 0x050505,
emissiveIntensity: 0.1
});
/* Model */
loader = function (url) {
scene.remove(object);
var objLoader = new THREE.OBJLoader();
objLoader.load(url, function (obj) {
object = obj;
object.traverse(function (child) {
if (child instanceof THREE.Mesh) {
child.material = material;
// How can I apply firstChildMaterial to the first child ?…
}
});
scene.add(object);
});
};
有一个带孩子的最终网格的截图
谢谢你的帮助! :-)
答案 0 :(得分:0)
您只需测试对象的名称:
object.traverse(function(obj) {
if (obj.name && obj.name.includes('mesh 1')) {
obj.material = firstChildMaterial;
}
});