2016-03-31 13 views
0

私はPointLightを使用するthree.jsでシーンを作成しました。Three.js:PointLight変更距離

var distance = 10000; 
var intensity = 10; 
var decay = 0; 
var hex = 0xFFFFFF; 
var light1 = new THREE.PointLight(hex, intensity, distance, decay); 

私は影を使いたいので、私はここにすべてが完璧に働いまで

light1.shadow.camera.near = 200; 
light1.shadow.camera.far = 10000; 
light1.shadow.camera.fov = 90; 
light1.shadow.bias = -0.00022; 
light1.shadow.mapSize.width = 1024; 
light1.shadow.mapSize.height = 1024; 

を追加しました。しかし、すぐに私は次の行に含めるよう:1000から10000から

light1.castShadow = true; 

次に距離目に見えて変化します。
light1からコンソールまでの距離を呼び出す場合は、まだ10000です。
キャンバスのようなものではありませんが。
(距離を変更しないで〜50桁の数字に変更しました)

これを解決する方法についてのご意見はありますか?

答えて

0

THREE.Texture()でシャドウを作成すると、シャドウは独立した要素になり、PointLightの位置に影響しません。

var shadowTexture = new THREE.Texture(canvas); 
shadowTexture.needsUpdate = true; 
var shadowMaterial = new THREE.MeshBasicMaterial({map: shadowTexture, opacity: 0.5}); 
var shadowGeo = new THREE.PlaneBufferGeometry(100, 100, 100, 1); 

// Locate the position of the shadows 
mesh = new THREE.Mesh(shadowGeo, shadowMaterial); 
mesh.position.y = 0; 
mesh.rotation.x = - Math.PI/2; 
scene.add(mesh); 

私は影がシーン上にキャストされていることを前提とするので、私はPlaneGeometryに影を適用しています。いずれにしても、シーン内の影に関するthis exampleを見てください。