2016-03-31 3 views
0

Я создал сцену с трёхмерными объектами, в которых я использую PointLight.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; 

Пока здесь все работало идеально. Однако, как только я включаю в следующей строке:

light1.castShadow = true; 

Тогда расстояние зримо изменяется от 10000 до 1000.
Если я нахожу расстояние от 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 относительно теней в сцене.

 Смежные вопросы

  • Нет связанных вопросов^_^