Three.js-应用材质时,导入的OBJ无法接收阴影

时间:2018-11-07 11:13:50

标签: javascript three.js 3d

我已使用此加载函数导入了一个obj:

    // called when resource is loaded
    function ( object ) {

        // For any meshes in the model, add our material.
        object.traverse( function ( node ) {

            if ( node instanceof THREE.Mesh ){
                //node.material = material;
                //node.geometry.computeVertexNormals(); 
                node.castShadow = true; 
                node.receiveShadow = true;
            }
        } );


        object.scale.set(0.5,0.5,0.5);
        scene.add( object );
        parts[partName] = object;

    }

该对象加载得很好,并且场景中的聚光灯具有阴影。问题是,当我将材料应用于网格时(为什么在上面的代码中将其注释掉),模型不再接收阴影。

将材质逐个节点地应用,并将材质这样映射为jpg。

if ( node.isMesh ) node.material = material;

new THREE.MeshBasicMaterial( { map: new THREE.TextureLoader().load( 'materials/orange.jpg' ), shininess: 50, shading: THREE.SmoothShading }),

谢谢您的帮助,埃德。

1 个答案:

答案 0 :(得分:1)

我正在使用

MeshBasicMaterial

应使用

MeshLambertMaterial

因此材料可以接收阴影。