Three.js - рендеринг теней на кубе, но не на импортированном объекте json mesh
Я пытаюсь заставить свой гоночный автомобиль бросить тень на пол. Тени работают от куба (куб отбрасывает тень), но гоночный автомобиль (импортированный объект сетки JSON) не отбрасывает тень. Как я могу заставить гоночную машину отбрасывать тень? Это как-то связано с выпуском json-файлов на материалах? Есть ли код obj.castShadow = true;
на самом деле нужно идти на ребенка от obj? В каком случае, какой ребенок? Что я здесь не так делаю?
Вот файл JSON и вот ссылка на демо
Вот соответствующий код:
var loader = new THREE.ObjectLoader();
loader.load("models/ferrari-f1-race-car.json", function (obj) {
obj.castShadow = true;
obj.scale.set(50,50,50);
obj.position.x = 30;
obj.rotation.y = Math.PI/1;
scene.add (obj);
});
boxgeometry = new THREE.BoxGeometry(100, 100, 100);
boxmaterial = new THREE.MeshLambertMaterial({
color: 0x0aeedf
});
var cube = new THREE.Mesh(boxgeometry, boxmaterial);
cube.castShadow = true;
cube.position.x = -80;
cube.position.y = 50;
cube.position.z = 0;
scene.add(cube);
function createFloor(){
floor = new THREE.Mesh(new THREE.PlaneBufferGeometry(1000,500), new THREE.MeshBasicMaterial({color: 0x8594a2}));
floor.rotation.x = -Math.PI/2;
floor.position.y = -0;
floor.castShadow = false;
floor.receiveShadow = true;
scene.add(floor);
}
1 ответ
Бросание теней стоит дорого и плохо поддерживается на пользовательских объектах, часто встречаются ошибки.
Лучшее решение - нарисовать теневую текстуру на прозрачной плоскости под автомобилем. Это может быть проблемой, если вам нужно повернуть машину или источник света, и вам нужна точная тень, потому что текстура не изменится с углом. До автора использовать приемы (вращать камеру или использовать много смещенных теней). Это все еще может дать удивительные визуализации, проверьте http://helloracer.com/racer-s/ и простое используемое изображение:
Еще более впечатляюще:
Для этой фотореалистичной демонстрации http://www.littleworkshop.fr/renaultespace/