静的ライト (カメラの移動に対して不変) を作成する必要があり、フラグメント シェーダーでライトの実際の位置を取得する必要があります。
私が今していること:
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;
問題は、正しく動作しないことです。私の考えは、私はオブジェクトで(実際にはカメラで)移動するということです。ライトは同じ側からまだ輝いています (シーン内で静的になります)。この時点で、光は静的ではなく、非常に奇妙な働きをします。
何か案が?誰かお願い...
たくさんのタンク。トマーシュ