정적 빛 (카메라의 움직임에 변하지 않음)을 만들어야하고 조각 쉐이더에서 빛의 실제 위치를 얻어야합니다. 있다는Three.js 빛이 정적이 아닙니다.
float dProd = max(0.0, dot(getGradient(posInCube), normalize(lightPos
- posInCube)));
voxelColored.rgb = voxelColored.rgb * dProd + voxelColored.rgb * 0.2;
문제 : 나는 균일 변수 설정
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;
및 복셀 빛을 계산 무엇 지금하고 있는가
그것은 올바르게 작동하지 않습니다. 내 생각은, 나는 (사실 카메라로) 물체로 움직일 것이다. 빛은 같은면에서 여전히 빛날 것입니다 (장면에서는 정적 일 것입니다). 이때 빛은 정적이지 않고 매우 이상하게 작동합니다.
아이디어가 있으십니까? 누군가 제발 ...
탱크가 많이 있습니다. 토마스
나는 PointLight를 시도했으나 좋지는 않지만 좋았습니다. float dProd = max (0.0, dot (getGradient (posInCube), normalize (normalize (pointLightPosition)\t voxelColored.rgb = voxelColored.rgb * dProd + voxelColored.rgb * 0.2; – Xrew
나는 해결책을 찾았습니다. 세계 공간에서 큐브의 복셀 위치는 없었습니다. - [ou .. . :( – Xrew