我有以下场景:
如您所见,我为定向光源激活了阴影。
问题是,当我使用顶点着色器(使用material.onBeforeCompile
)更改树顶顶点时,阴影不会自动更新
因此,在尝试解决此问题时,我了解到由于光源使用深度材料来计算阴影贴图,因此我还应该更新网格的深度材料...
这就是问题所在。
设置mesh.customDepthMaterial = new THREE.MeshDepthMaterial();
后,阴影甚至在我更改顶点着色器之前就消失了。
我不知道这是否有帮助,但是当我将网格物体的材质设置为new THREE.MeshDepthMaterial()
时,如果没有onBeforeCompile
功能,场景中的所有网格物体都会显示为黑色
编辑:添加代码
这是代码的链接:codepen
搜索功能createObject
,其中有一个段:
let mesh = new THREE.Mesh(geom, material);
// mesh.customDepthMaterial = new THREE.MeshDepthMaterial();
// mesh.customDepthMaterial.onBeforeCompile = (shader) =>
// {
// }
在场景中创建的所有网格都通过此功能。 如果取消注释第一条注释行,则来自太阳的阴影会消失,但是指针的阴影会保留。