Three.js指向不使用大网格的光

时间:2014-03-05 17:00:41

标签: javascript 3d three.js

我有以下问题。当我像这样使用Three.js点光源时:

 var color = 0xffffff;   
 var intensity = 0.5;
 var distance = 200;
 position_x = 0;
 position_y = 0;
 position_z = 0;

 light = new THREE.PointLight(color, intensity, distance); 
 light.position.set(position_x, position_y, position_z);
 scene.add(light);

当有一个靠近场景灯光的“小”物体(网格)时,它会按预期工作。但是,当有一个大物体时(让我们说一个地板):

 var floorTexture = new THREE.ImageUtils.loadTexture( 'floor.jpg' );
 floorTexture.wrapS = floorTexture.wrapT = THREE.RepeatWrapping; 
 floorTexture.repeat.set( 1, 1);
 var floorMaterial = new THREE.MeshBasicMaterial( { map: floorTexture, side: THREE.DoubleSide } );
 var floorGeometry = new THREE.PlaneGeometry(1000, 1000, 10, 10);

 var floor = new THREE.Mesh(floorGeometry, floorMaterial);
 floor.position.y = -0.5;
 floor.rotation.x = Math.PI / 2;
 scene.add(floor);

然后灯不会显示在上面。起初我认为这是因为地板中心位置远离点光源,因此点光源无法到达它,距离设置为200(即使地板的一部分比上述距离更近)。因此我试图增加这个距离 - 没有运气。

有一种解决方法可以用小部件创建地板。然后点光源再次按预期工作,但这种方法存在问题 - 即由于要渲染大量的“楼层对象”,它会大幅降低FPS。

我的猜测是我错过了什么。我知道还有其他类型的灯光覆盖了整个场景,但我正在尝试制作一盏灯,所以我想我需要使用点光源。但我可能错了。任何帮助或提示如何使这项工作将不胜感激。

1 个答案:

答案 0 :(得分:2)

MeshBasicMaterial不支持灯光。使用MeshPhongMaterial

MeshLambertMaterial也支持灯光,但在您的情况下,由于此处说明的原因而不建议:Three.js: What Is The Exact Difference Between Lambert and Phong?

three.js r.66