是否有可能让GLSL产生这个:
这是我的片段着色器:
#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;
}
我的结果是:
我想设置对象的颜色,并在纹理的alpha小于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);