Three.js光不是静止的

时间:2013-03-27 18:15:31

标签: javascript three.js webgl

我需要创建静态光(对于移动相机不变),我需要在片段着色器中获得光的实际位置。

我现在在做什么:

        scene = new THREE.Scene();
        camera = new THREE.PerspectiveCamera(60, canvas.width() / canvas.height(), 1, 10000);
        camera.position.z = 2000;
        camera.lookAt(0, 0, 0);

        var light = new THREE.SpotLight(0xFFFFFF, 1);
        light.position.set(0.5, 0.5, 0.1).normalize();
        camera.add(light);

        ....

        var lambertShader = THREE.ShaderLib['lambert'];
        uniformsVolume = THREE.UniformsUtils.clone(lambertShader.uniforms);

        ....

        materialVolumeRendering = new THREE.ShaderMaterial({
            uniforms: uniformsVolume,
            vertexColors: THREE.VertexColors,
            vertexShader: vertVolumeRendering,
            fragmentShader: fragVolumeRendering,
            vertexColors: THREE.VertexColors,
            lights :true
        });

        ....
        scene.add(camera);

在片段着色器中,我设置了统一变量:

uniform vec3 spotLightPosition;

并为体素计算灯光:

float dProd = max(0.0, dot(getGradient(posInCube), normalize(lightPos
- posInCube)));             
voxelColored.rgb = voxelColored.rgb * dProd + voxelColored.rgb * 0.2;

问题是,它无法正常工作。我的想法是,我会用物体移动(实际上用相机)。光线仍会从同一侧照射(在场景中是静止的)。此时光不是静止的,工作很奇怪。

有什么想法吗? 有人请...

坦克很多。 托马什

2 个答案:

答案 0 :(得分:1)

请尝试使用PointLightSpotLight使用起来有点棘手。

答案 1 :(得分:0)

要使灯光静止不动,请不要将其添加到相机中,而是将其添加到场景中:

scene.add(光);

找到位置参考用于灯光的变量。

light.position