2016-03-31 7 views
0

Ich habe eine Szene mit three.js gemacht, in der ich ein PointLight nutze.Three.js: PointLight ändere die Entfernung

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

Ich will Schatten verwenden, so dass ich hinzugefügt

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; 

Bis hier alles perfekt funktioniert. Aber sobald ich in der nächsten Zeile enthalten:

light1.castShadow = true; 

Dann wird der Abstand sichtbar Änderungen 10000-1000.
Wenn ich den Abstand von light1 zur Konsole aufrufen, ist es immer noch 10000.
Obwohl es nicht so in der Leinwand ist.
(Ich habe es geändert, um eine ~ 50-stellige Nummer ohne Abstandsänderung)

Irgendwelche Vorschläge zur Lösung?

Antwort

0

Sie können versuchen, einen Schatten über THREE.Texture() zu erstellen, auf diese Weise wird der Schatten ein unabhängiges Element sein und sollte die Position des PointLight nicht beeinflussen.

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); 

Ich bewerbe mich um den Schatten zu einem PlaneGeometry da ich davon aus, dass der Schatten auf der Szene gegossen wird. Sehen Sie sich auch this example in Bezug auf Schatten in einer Szene an.