【发布时间】:2013-01-19 14:31:03
【问题描述】:
我似乎在网上找不到任何关于修复对象阴影投射的信息,这些纹理的 alpha != 1。
有没有什么方法可以实现“每个片段深度测试”,而不是“每个顶点”,所以如果彩色纹素具有透明度,我可以丢弃片段在阴影贴图上的出现?此外,理论上,它可以使阴影映射更准确。
编辑
好吧,也许这是我上面给出的一个糟糕的想法,但我只想告诉着色器,如果纹素的 alpha
无论如何,通过部分透明的对象修复阴影投射的主要思想是什么?
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;
}
这很奇怪,因为我在我的其他着色器中使用相同的技巧和相同的纹理,它可以工作......有什么想法吗?
【问题讨论】:
-
你能解释一下你的意思吗?深度 测试每个片段。如果你想避免写入到每个像素的阴影贴图,这是完全可能的。