2014-05-02 34 views
1

基於文檔和一些示例等,我無法弄清楚這個小提琴有什麼問題(http://jsfiddle.net/resistdesign/s6npL/),燈應該工作。爲什麼我的three.js照明不起作用?

var camera, scene, renderer, geometry, material, mesh, light1; 

init(); 
animate(); 

function init() { 

    scene = new THREE.Scene(); 

    camera = new THREE.PerspectiveCamera(50, window.innerWidth/window.innerHeight, 1, 10000); 
    camera.position.z = 500; 
    scene.add(camera); 

    geometry = new THREE.CubeGeometry(200, 200, 200); 
    material = new THREE.MeshPhongMaterial({ ambient: 0x555555, color: 0x555555, specular: 0xffffff, shininess: 50, shading: THREE.SmoothShading }); 

    mesh = new THREE.Mesh(geometry, material); 
    scene.add(mesh); 

    scene.add(new THREE.AmbientLight(0x000000)); 

    light1 = new THREE.PointLight(0xff0040, 2, 50); 
    scene.add(light1); 

    renderer = new THREE.WebGLRenderer(); 
    renderer.setSize(window.innerWidth, window.innerHeight); 

    document.body.appendChild(renderer.domElement); 

} 

function animate() { 

    requestAnimationFrame(animate); 
    render(); 

} 

function render() { 

    var time = Date.now() * 0.0005; 

    mesh.rotation.x += 0.01; 
    mesh.rotation.y += 0.02; 

    light1.position.x = Math.sin(time * 0.7) * 30; 
    light1.position.y = Math.cos(time * 0.5) * 40; 
    light1.position.z = Math.cos(time * 0.3) * 30; 

    renderer.render(scene, camera); 

} 

回答

3

我似乎是誤解了PointLight()的參數的含義。第三個參數是光線強度實際爲零的距離。因此,在init()加上這些行:

light1 = new THREE.PointLight(0xff0040, 1, 5000); 
light1.position.set(500, 500, 500); 

同時刪除從render()例程light1.position的更新,直到你要確保它做什麼,你的想法。

相關問題