2014-04-19 161 views
0

是否有可能得到GLSL產生這樣的: enter image description here紋理GLSL顏色ontop的

這是我的片段着色器:

#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這個節目......

+0

找到了我的問題。這不是在着色器文件中的行爲!這是我的SDL_CreateRGBSurface()缺少RGBA掩碼的參數。 我解決了它通過:0x00ff0000,0x0000ff00,0x000000ff,0xff000000 –

+0

你可以更新問題(或者更好的是,寫一個簡短的答案)顯示一些錯誤發生的背景代碼?對於遇到類似問題的其他人來說,這非常有幫助! –

回答

0

很顯然,我的紋理未正確放置畢竟,因爲它給了我一個恆定的alpha值爲0,所以當我試圖調用GLSL中的Mix()時,它最終完全取消了它。

我裝這樣的質地:

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

有人將其設置爲這個解決了,所以它實際上正確conciders 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);