three.js - 三JS,OBJ的颜色不显示
问题描述
我已经加载了 .obj 文件并将颜色设置为其细节,但它只显示为全黑
const loader = new OBJLoader();
loader.load( src, function ( obj ) {
obj.traverse( function ( child ) {
child.material.color.setHex(0xFF0000);
console.log("child.material.color: ", child.material.color);
}
}
scene.add(obj);
...
var hemiLight = new THREE.HemisphereLight( 0xffffff, 0x444444 );
hemiLight.position.set( 0, 300, 0 );
scene.add( hemiLight );
var dirLight = new THREE.DirectionalLight( 0xffffff );
dirLight.position.set( 75, 300, -75 );
scene.add( dirLight );
console.log 打印出对象 Color: {r: 1, g: 0, b: 0, isColor: true}
那么,有什么我错过的吗?
解决方案
在我看来,它就像你拥有它的方式,你实际上并没有将它添加到场景中,因为 'obj' ref 仅在 (async) 回调中有效。
如果将 scene.add(obj) 移动到回调中,它应该可以工作。
我创建了一个代码笔: https ://codepen.io/flatworldstudio/pen/ExNpedV
寻找这一点:
loader.load(src, function (obj) {
console.log(obj);
scene.add(obj);
ref = obj;
obj.traverse(function (child) {
if (child.material) {
child.material.color.setHex(0xff0000);
console.log("child.material.color: ", child.material.color);
}
});
});
推荐阅读
- python - Pandas:如何仅删除列末尾的最后一个连字符
- google-forms - 如何根据其他用户过去的回复使 Google 表单自动填充?
- c - 我知道一个地址,但我应该如何判断在哪个部分?使用C的全局区域或堆区域或堆栈区域
- json - 如何解决“手势 RangeError(索引)捕获的异常:无效值:有效值范围为空:0”
- c++ - 什么会使多边形算法中的点仅在正向和反向运行时才能正常工作?
- php - PHP:如何使用键->值对每两个分隔符将一个字符串分解为一个数组
- kubernetes - 将 GKE 集群拆除为“全新”状态而不删除它?
- scala - Spark——自定义reduce函数保存到磁盘然后上传到s3
- javascript - XMLHttpRequest 返回事件对象而不是实际数据
- fortran - Fortran 将未知大小的文件读入数组