Threejs - 使用MeshDepthMaterial

时间:2015-10-03 17:28:24

标签: javascript opengl-es three.js transparency depth-buffer

所以我试图对我制作的一些pixelart产生景深效果。

为此,我需要一个带有深度信息的纹理。所以我使用MeshDepthMaterial在一个平面上渲染我的纹理,但我得到的只是一个灰色矩形,它完全忽略了纹理中的alpha数据(只有1或0,中间没有任何东西)。

当然我正在使用

depthMaterial.transparent = true;
depthMaterial.alphaTest = 0.5;
depthMaterial.needsUpdate = true; //just to be sure

为了您的兴趣,这是我的pixelart及其呈现方式:http://imgur.com/a/TLQOe

1 个答案:

答案 0 :(得分:2)

MeshDepthMaterial根本不会读取表面纹理。

相反,您需要覆盖'depth' ShaderChunk的值以包含UV和您的alpha-test-able纹理,或者添加额外的ShaderMaterial来自己完成工作。根据应用程序的总体需求,一种方法比另一种方法更好。如果没有非纹理对象需要投射阴影,前者将是最简单的维护。如果没有,您需要做更多的工作来管理哪些rendertargets获得什么和如何。