gpt4 book ai didi

c++ - 使用 alpha 值渲染纹理(贴花)?

转载 作者:行者123 更新时间:2023-11-27 23:39:14 25 4
gpt4 key购买 nike

我尝试绘制 decals 和 background 两种纹理,但只有 decals 的 alpha 部分变成白色。

我只是尝试了以下方法。

  • 绘制 2 个纹理(背景和贴花)
  • 添加 glBlendFunc 以应用贴花 alpha 值
#version 330 core

in vec2 UV;

out vec3 color;

uniform sampler2D background;

in vec3 decalCoord;
uniform sampler2D decal;

void main(){

vec3 BGTex = texture( background, UV ).rgb;
vec3 DecalTex = texture(decal, decalCoord.xy).rgba;

color =
vec4(BGTex,1.0) + // Background texture is DDS DXT1 (I wonder if DXT1 is the cause?)
vec4(DecalTex,0.0); // Decal texture is DDS DXT3 for alpha

}
// Set below...
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBlendEquation(GL_FUNC_ADD);

enter image description here

我能够正常绘制,但存在以下问题。- 贴花的 alpha 部分不能透明。

这是可以在片段着色器中解决的问题吗?那么,我该如何重写代码呢?

纹理是DDS,其中一种是DXT1类型(背景。因为这种纹理不需要alpha),另一种是DXT3类型(贴花)。也是这个原因吗?(都需要是DXT3类型?)

另外,我是否应该寻找另一种贴花的方法?

最佳答案

  1. DecalTex 应该是 vec4,而不是 vec3。否则阿尔法不会存储值。

  2. 您还必须将末尾的行更改为:color =
    vec4(BGTex, 1.0) + DecalTex * DecalTex.a
    目前它设置 alpha 分量到 0。

关于c++ - 使用 alpha 值渲染纹理(贴花)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56777277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com