我需要創建靜態光源(不變的移動相機),我需要在片段着色器中獲得光的實際位置。Three.js光不是靜態的
什麼我現在是這樣做的:
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;
問題是,它不能正常工作。我的想法是,我會用物體移動(實際上是用相機)。光會從同一側發光(在場景中將是靜態的)。這時光不是靜止的,工作很奇怪。
有什麼想法? 有人請...
坦克很多。 托馬什
我試過PointLight;它是更好但不好。 我現在這樣做: float dProd = max(0.0,dot(getGradient(posInCube),normalize(normalize(pointLightPosition) - 正常化(posInCube))); \t voxelColored.rgb = voxelColored.rgb * dProd + voxelColored.rgb * 0.2; – Xrew 2013-03-28 08:46:35
我是noob ...我找到了解決方案,在世界空間的立方體werent中的體素位置: - [ou .. 。:( – Xrew 2013-03-28 20:42:29