#javascript #three.js
#javascript #three.js
Вопрос:
У меня есть объект, который я создаю следующим образом:
const geometry = new THREE.SphereBufferGeometry(2,100,100);
const material = new THREE.MeshPhongMaterial({
map: myImage
transparent: true,
side: THREE.DoubleSide,
opacity: 0.8
});
const mesh = new THREE.Mesh(geometry, material);
Этот материал обладает некоторой прозрачностью, и я хочу, чтобы только непрозрачные части отбрасывали тень, поэтому я добавляю:
mesh.customDepthMaterial = new THREE.MeshDepthMaterial({
depthPacking: THREE.RGBADepthPacking,
alphaTest: 0.4,
map: image
});
Это отлично отображается в сцене. Если я проверю сцену, это свойство customDepthMaterial существует в сетке.
Но когда я это делаю scene.toJSON()
, это свойство не включается в эту сетку (и если я загружаю этот JSON в сцену, прозрачность теряется, потому что нет customDepthMaterial).
Предназначено ли это? Или ошибка? Или я просто делаю что-то не так?
Ответ №1:
Предназначено ли это? Или ошибка? Или я просто делаю что-то не так?
Вы все делаете правильно! Проблема в том, что three.js
пока не поддерживает сериализацию / десериализацию для Object3D.customDepthMaterial
and Object3D.customDistanceMaterial
.
Я предлагаю вам подать запрос на создание функции на GitHub.
three.js r122