【问题标题】:OpenGL 3.2 : cast right shadows by transparent texturesOpenGL 3.2:通过透明纹理投射右阴影
【发布时间】: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;
}

这很奇怪,因为我在我的其他着色器中使用相同的技巧和相同的纹理,它可以工作......有什么想法吗?

【问题讨论】:

  • 你能解释一下你的意思吗?深度 测试每个片段。如果你想避免写入到每个像素的阴影贴图,这是完全可能的。

标签: opengl glsl


【解决方案1】:

如果您在片段着色器中使用丢弃,则不会为该片段记录深度信息。因此,在您的片段着色器中,只需添加一个测试以查看纹理是否透明,如果是则丢弃该片段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-09
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    相关资源
    最近更新 更多