2013-04-09 162 views
1

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

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

我将包含所有的代码,因为问题可能在某个不可预见的地方。

工作链接可HERE

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'); 

回答

10

你的对象的每个子网必须有castShadow设置为true

newModel.traverse(function (child) { 

    if (child instanceof THREE.Mesh) { 

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

    } 

}); 

要获得raycaster.intersectObjects()与对象的工作,你需要递归标志设置为true

var intersects = raycaster.intersectObjects(objects, true); 

three.js所r.57

+0

非常感谢您!一天后,我茫然地看着屏幕,第一次完美地工作。非常感激。 (现在我只需要弄清楚这些变化究竟意味着什么!) – 2013-04-09 21:09:02