three.js - 在three.js中将 Material 分配给OBJLoader模型

标签 three.js

我使用以下代码导入了OBJ模型:

var loader = new THREE.OBJLoader();
loader.addEventListener('load', function (geometry) {
    object = geometry.content;
    scene.add(object);
});
loader.load('ship.obj');

它可以正常工作,但是每当我尝试向其中添加 Material 时,它要么无效,要么模型消失。我以为我可以这样做:
var ship = new THREE.Mesh(object, material);

但这是行不通的。有谁知道这样做的方法,或者甚至可能吗?我也尝试过使用OBJMTLLoader,但这只会增加复杂性,同时仍然不允许我更改 Material 。

最佳答案

编辑:这个答案现在已经过时了。相反,请查看@mightypile的答案。

假设您已经正确定义了material,请尝试以下操作:

loader.addEventListener( 'load', function ( event ) {

    var object = event.content;

    object.traverse( function ( child ) {

        if ( child instanceof THREE.Mesh ) {

            child.material = material;

        }

    } );

    scene.add( object );

});

关于three.js - 在three.js中将 Material 分配给OBJLoader模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16200082/

相关文章:

javascript - 如何使用 Three.js 使用鼠标旋转 3D 对象而不将其旋转到屏幕外?

three.js - 使用 THREE.js 在立方体几何体上应用纹理

javascript - 在 Three.js 中更改 MouseOver 上的纹理颜色

javascript - 在 THREE.js 中使用网络 worker

three.js - ThreeJS 将属性从一台相机应用到另一台相机

javascript - ThreejstextureLoader - 缩放和映射到网格

javascript - 使用 SVGRenderer 将图像渲染为 Three.js 中的节点(或以其他方式渲染球体)

javascript - 如何在 three.js 中使用反射?

three.js - 三个js可点击立方体纹理

javascript - 不要在 three.js 中加载 obj 模型上的纹理