Three.js OBJLoader .obj模型没有投射阴影

Max*_*mmo 1 javascript webgl three.js

我正在开发一个项目,我希望允许从OBJLoader.js加载的.OBJ模型从聚光灯投射阴影.灯会投射其他普通物体的阴影,但.OBJ似乎不会投射阴影.

该问题的一个可能症状如下:当点击地板时创建这些普通对象时,它们将被输入到数组Objects []中,这反过来使它们可以单击以在其自身之上添加对象..OBJ模型也被添加到这个数组中,但是我不能点击它来在它上面添加模型; 好像raycaster没有检测到它.

我将包含所有代码,因为问题可能存在于无法预料的地方.

这里有一个工作链接

http://www.powertrooper.com/3D/demos/issues/OBJShadows

尝试单击地板以查看其他对象如何投射阴影.

有人有主意吗?Mr.Doob?你在外面吗?:)

ps:我不知道为什么在我的浏览器中,我留下的链接指向一个名为"4safe.in"的恶意软件站点.尝试复制并粘贴链接我猜...

以防万一 - 这里有一段代码,其中包含可能导致问题的大部分内容.

    renderer.shadowMapEnabled = true;///////////////////////////////////////////// RENDERER /// <------------Renderer and lights set up to cast shadows
    light.castShadow = true;
    light.shadowDarkness = 1;
    renderer.shadowMapSoft = true;
    floor.receiveShadow = true;

    var texture = new THREE.Texture();
    var loader = new THREE.ImageLoader();
    loader.addEventListener( 'load', function ( event ) {

        texture.image = event.content;
        texture.needsUpdate = true;

    } );
    loader.load( 'modeltest/ash_uvgrid01.jpg' );

    // model

    var loader = new THREE.OBJLoader();
    loader.addEventListener( 'load', function ( event ) {

        var newModel = event.content;

         newModel.traverse( function ( child ) {

             if ( child instanceof THREE.Mesh ) {

                 child.material.map = texture;

            }

         } );

        newModel.position.set (200,30,0);
        newModel.castShadow = true;///////////////////////////// <------ This doesn't seem to be working.
        scene.add( newModel );
        objects.push( newModel );/////////////////////////////// <------ The other HINT: because of this, the raycaster SHOULD allow us to click the model and create a new block. But we can't.


    });

    loader.load( 'modeltest/male02.obj' );
Run Code Online (Sandbox Code Playgroud)

Wes*_*ley 12

对象的每个子网格必须castShadow设置为true.

newModel.traverse( function ( child ) {

    if ( child instanceof THREE.Mesh ) {

        child.material.map = texture;
        child.castShadow = true;

    }

} );
Run Code Online (Sandbox Code Playgroud)

raycaster.intersectObjects()使用对象,需要将递归标志设置为true.

var intersects = raycaster.intersectObjects( objects, true );
Run Code Online (Sandbox Code Playgroud)

three.js r.57