2017-09-15 200 views
0

我遵循three.js入门教程,但很快就试图将点光源添加到场景中。无论我如何嘲笑我的代码,点光源都不会点亮立方体。如何在three.js中配置点光源

var scene = new THREE.Scene(); 
var camera = new THREE.PerspectiveCamera(75, 
      window.innerWidth/window.innerHeight, 0.1, 1000); 
var renderer = new THREE.WebGLRenderer(); 
renderer.setSize(window.innerWidth, window.innerHeight); 

document.body.appendChild(renderer.domElement); 

camera.position.z = 55; 

var light = new THREE.PointLight(0xff0000, 1, 100, 2); 
light.position.set(20,0,20); 
light.castShadow = true; 

scene.add(light); 

var spheresize = 1; 
var pointLightHelper = new THREE.PointLightHelper(light, spheresize); 
scene.add(pointLightHelper); 

var ambient = new THREE.AmbientLight(0x303030); 
scene.add(ambient); 

var cube_geometry = new THREE.BoxGeometry(10,10,10); 
var cube_material = new THREE.MeshLambertMaterial({color:0x00ff00}); 
var cube = new THREE.Mesh(cube_geometry, cube_material); 
scene.add(cube); 

animate(); 


function animate(){ 
    requestAnimationFrame(animate); 

    cube.rotation.y += 0.01; 

    renderer.render(scene, camera); 
} 

在上面的代码中,我可以看到的光的辅助显示,绿色立方体由环境光照亮,但没有光来自所述光点(见所附图像)。我错过了什么?我怎样才能让点光源照亮立方体呢? code result

回答

3

光线正常,但您需要更改灯光或材质的颜色。

目前,您正在纯绿色材料上照射纯红光。材料的颜色决定哪种颜色成分(以及以何种数量)由材料反映出来。而且由于纯红光没有绿色成分,因此光似乎完全错过了物体。

这是违反直觉的,因为在我们的物理世界中,很少有纯红光和纯绿色的材料。

+0

啊,那是问题所在。我永远不会想到这一点。非常感谢! – ORL