Некоторые свойства свойств теней были переименованы в последние версии, но в основном они работают одинаково.
Настройка визуализации для теневых карт (и выбор больше вычислений типа дорогой карты тени):
var renderer = new THREE.WebGLRenderer();
renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap; // default THREE.PCFShadowMap
Настройка света (обратите внимание, как он работает с THREE.PointLight):
var light = new THREE.PointLight(0xffffff, 1, 100);
light.position.set(0, 12, 0);
light.castShadow = true; // default false
light.shadow.mapSize.width = 1024; // default 512
light.shadow.mapSize.height = 1024; // default 512
light.shadow.camera.near = 2; // default 0.5
light.shadow.camera.far = 100; // default 500
//light.shadow.camera.left = 500 // Not sure about this one +
// right, top and bottom, Do they still do anything?
scene.add(light);
Вы получаете уведомление обо всех этих изменениях API, если вы проверяете консоль при попытке использовать свойства, указанные в текущем документе.
Создание вам объектов, приведение типов и получает тени такой же, как и раньше:
//Creating box
var boxGeometry = new THREE.BoxGeometry(1, 1, 1);
var boxMaterial = new THREE.MeshPhongMaterial({ color: 0xdddddd, specular: 0x999999, shininess: 15, shading: THREE.FlatShading });
var box = new THREE.Mesh(boxGeometry, boxMaterial);
box.castShadow = true;
scene.add(box);
creating plane
var planeGeometry = new THREE.PlaneGeometry(20, 20, 32, 32);
var planeMaterial = new THREE.MeshPhongMaterial({ color: 0x00dddd, specular: 0x009900, shininess: 10, shading: THREE.FlatShading })
var plane = new THREE.Mesh(planeGeometry, planeMaterial);
plane.receiveShadow = true;
scene.add(plane);
Размещение самолета под коробкой и он получит тень.
Вот рабочая codepen example
EDIT В текущей версии three.js, сцена должна быть оказана, по крайней мере в два раза для теней, чтобы показать.
THREE.js r75.
В таком случае, в чем голый минимум, чтобы получить основную тень? Нужно ли добавлять shadowMap.type? В моем учебнике единственным предупреждением консоли, которое я получил, было использование «shadowMap.enabled» вместо «shadowMapEnabled». Это мой код - http://codepen.io/estevancarlos/pen/pyVONK – rpeg
@rpeg. Я думаю, что это ошибка в текущей версии THREE.js. При первом рендеринге сцены теневая карта не будет отображаться. вы должны сделать это второй раз. Просто выполните: 'renderer.render (сцена, камера),' atleast two. И вам не нужно устанавливать «shadowMap.type», «shadow.camera.near/far'» или «shadow.mapSize.height/width». Все они имеют значения по умолчанию. – micnil