我有一个对象,创建方式如下:
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)。
这是故意的吗?还是一个错误?还是我的操作有误?