Three.js替换模型材质为PointsMaterial后无显示问题求助
解决PointsMaterial替换后模型不显示的问题
我仔细看了你的代码,发现导致模型无法显示的核心问题有两个:
PointsMaterial不支持光照设置
你在创建PointsMaterial时加了lights: true,但Three.js的PointsMaterial本身不支持光照计算,这个属性对它完全无效,反而会干扰材质的正常渲染逻辑。直接移除这个属性就能解决大部分问题。颜色值的范围验证
虽然控制台显示材质数组状态正常,但要确认Blender导出的JSON里的颜色值是0-1的浮点数(这是THREE.Color构造函数的预期输入格式)。如果导出的是0-255的整数,必须先除以255才能正确解析颜色,比如:
var color = new THREE.Color(j.color.r / 255, j.color.g / 255, j.color.b / 255);
下面是修正后的完整代码:
var loader = new THREE.JSONLoader(); var model = loader.parse(json from elsewhere); var mesh; var pointMats = []; model.materials.forEach(function(j) { // 根据导出的颜色值范围调整,这里假设是0-1的浮点数 var color = new THREE.Color(j.color.r, j.color.g, j.color.b); var newPointsMat = new THREE.PointsMaterial({ name: j.name, color: color, size: 1 // 移除了无效的lights属性 }); pointMats.push(newPointsMat); }); mesh = new THREE.Points(model.geometry, pointMats); scene.add(mesh);
额外提个小检查点:如果你的原模型是多材质结构,确认model.geometry.groups数组的长度和pointMats的长度一致,这样Three.js才能正确把每个材质对应到几何体的对应部分。如果还是有问题,可以打印model.geometry.groups看看是否存在正确的分组信息。
内容的提问来源于stack exchange,提问作者Tom Chapman
相关产品推荐
相关产品推荐

