GLSL颜色与顶部的纹理

时间:2014-04-19 08:04:11

标签: colors textures glsl

是否有可能让GLSL产生这个: enter image description here

这是我的片段着色器:

#version 120

uniform sampler2D diffuse;

varying vec3 shared_colors;
varying vec2 shared_texCoords;

void main() {
    vec4 color = vec4(shared_colors, 1);
    vec4 texture = texture2D(diffuse, shared_texCoords);
    vec4 finalColor = vec4(mix(color.rgb, texture.rgb, texture.a), 1);
    vec4 fCol = color * texture;

    gl_FragColor = fCol;
}

我的结果是:

  • finalColor =红色,无纹理
  • fCol =无颜色(黑色),红色纹理

我想设置对象的颜色,并在纹理的alpha小于1的任何地方显示...

1 个答案:

答案 0 :(得分:0)

显然,我的纹理毕竟没有正确加载,因为它给了我一个恒定的alpha值0,所以当我试图在GLSL中调用Mix()时,它最终完全取消它。

我加载了这样的纹理:

SDL_CreateRGBSurface(NULL, rawImage->w, rawImage->h, 32, 0, 0, 0, 0);

通过设置它来解决它,所以它实际上正确地汇总了alpha通道:

SDL_CreateRGBSurface(NULL, rawImage->w, rawImage->h, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000);

此后我发现我的纹理加载了反向rgb通道(意味着它使用了bgr),所以我在着色器中合并纹理时也改变了它。 从:

vec4 finalColor = vec4(mix(color.rgb, texture.rgb, texture.a), 1);

要:

vec4 finalColor = vec4(mix(color.rgb, texture.bgr, texture.a), 1);