我按照了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);
}
在上面的代码中,我可以看到光助手显示,绿色立方体被环境光照亮,但没有光来自点光源(见附图)。我错过了什么?如何让点光源照亮立方体?
答案 0 :(得分:3)
灯光工作正常,但您需要更改灯光或材质的颜色。
目前,您正在将纯红光照射在纯绿色材料上。材料的颜色决定了材料反射的颜色成分(以及数量)。由于纯红光没有绿色成分,光线似乎完全错过了物体。
这是违反直觉的,因为在我们的物理世界中,很少有纯红光和纯绿色材料。