OpenGL 3.2:通过透明纹理投射正确的阴影



我似乎在网上找不到关于固定物体阴影投射的任何信息,哪些纹理有alpha != 1。

是否有任何方法来实现像"每片段深度测试",而不是"每顶点",所以我可以丢弃碎片出现在阴影地图上,如果彩色纹理有透明度?此外,从理论上讲,它可以使阴影映射更准确。

编辑

好吧,也许这是我上面给出的一个糟糕的想法,但我只想告诉着色器,如果texel有alpha<1,就没有必要在texel后面阴影东西。我猜深度纹理只需要顶点信息,这就是为什么每个关于阴影映射的教程都最小化顶点和空片段着色器,当尝试用片段着色器做一些事情时什么也不会发生。

不管怎样,修复部分透明物体的阴影投射的主要思想是什么?

EDIT2

我已经修改了我的着色器,现在它丢弃每一个片段,如果至少有一个透明度o_O。所以这些物体现在不会投射任何阴影(但不透明的)…请看看这些着色器:

// Vertex Shader
uniform mat4 orthoView;
in vec4 in_Position;
in vec2 in_TextureCoord;
out vec2 TC;
void main(void) {
TC = in_TextureCoord;
        gl_Position = orthoView * in_Position; 
}

.

//Fragment Shader
uniform sampler2D texture;
in vec2 TC;
void main(void) {
vec4 texel = texture2D(texture, TC);
if (texel.a < 0.4)
    discard;
}

这很奇怪,因为我使用相同的技巧与相同的纹理在我的其他着色器和它的工作…什么好主意吗?

如果你在片段着色器中使用丢弃,那么没有深度信息将被记录为该片段。因此,在你的片段着色器中,只需添加一个测试,看看纹理是否透明,如果是,丢弃该片段。

最新更新