1

静的ライト (カメラの移動に対して不変) を作成する必要があり、フラグメント シェーダーでライトの実際の位置を取得する必要があります。

私が今していること:

        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;

問題は、正しく動作しないことです。私の考えは、私はオブジェクトで(実際にはカメラで)移動するということです。ライトは同じ側からまだ輝いています (シーン内で静的になります)。この時点で、光は静的ではなく、非常に奇妙な働きをします。

何か案が?誰かお願い...

たくさんのタンク。トマーシュ

4

2 に答える 2

1

PointLight代わりに試してみてください。SpotLight使用するのは少しトリッキーです。

于 2013-03-28T01:41:07.333 に答える
0

ライトを固定するには、カメラに追加するのではなく、シーンに追加します。

シーン.追加(ライト);

位置を見つけるには、ライトに使用した変数を参照します。

光の位置

于 2013-03-27T19:57:56.977 に答える