2016-04-07 16 views
0

için Renk Sabit Bir piksel kapalıyken bir piksel açık mı ve saydam mı?OpenGL Fragman Shader Dönüş Şu anda doku bir pikselin rengini döndürür parça gölgelendirici altında olması Doku

Kullanmakta olduğum TGA dosyası saydamlık ve yeşil ve kahverengi bir görüntü içeriyor (temel ağaç resmi - yeşil üst, kahverengi gövde). Yapmaya çalıştığım şey, ağacın şeklini yeşil, kahverengi ve şeffaflık yerine belirli bir renkte (bir siluet gibi) meydana getirmektir. Eğer gl_FragColor'u ayarlı bir renge değiştirirsem, görüntü istediğim gibi değil, sağlam bir dikdörtgen olarak çizilir.

Sadece sabit rengin atanması ve texture2D tarafından döndürülen alfa (.a?) Değerini kullanma meselesi mi?

aşağıda hat bana beyaz bir silüet verir ama alfa kanalı yok sayılır yüzden siyah bir dikdörtgen içinde beyaz bir ağacı almak:

gl_FragColor = texture2D(s_texture, v_texCoord).aaaa; 

GÜNCELLEME: Aşağıdaki ama hala bir dikdörtgen render edilir çalıştı. Şeffaflığın dokumama yüklenmediği anlaşılıyor. GIMP ile kesinlikle şeffaf, ancak şeffaflık bir nedenden dolayı benim için beyaz gibi görünüyor.

vec4 tmpColor = texture2D(s_texture, v_texCoord); 

    tmpColor.r = vColor4.r; 
    tmpColor.g = vColor4.g; 
    tmpColor.b = vColor4.b; 

// gl_FragColor = texture2D(s_texture, v_texCoord); 
    //gl_FragColor = vColor4; 
    gl_FragColor = tmpColor; 

My LoadTexture() işlevi, aşağıdaki parametreleri kullanır: piksel başına

glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, TexHandle); // Set our Tex handle as current 

    // Specify filtering and edge actions 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 

    //glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); 

    glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA, Img.GetWidth(),Img.GetHeight(),0, 
       GL_RGBA,GL_UNSIGNED_BYTE,Img.GetImg()); 

Bit (BPP) kesinlikle 32 (R, G, B, A).

+0

sen ('glEnable (GL_BLEND)') etkin harmanlama var mı farklı harmanlama denklem sonuçlarını görmek için? Karıştırma işleviniz nedir ('glBlendEquation')? –

cevap

1

Karıştırma ve karıştırma işlevini etkinleştirmeniz gerektiği gibi görünüyor (muhtemelen glBlendEquation'u kullanarak belirli bir denklem ve denklem).

glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

Büyük tester

here

+0

Vay! Dürüst olmak gerekirse (ve bir yerde okuyun) glEnable (GL_BLEND) ile shader'ları kullanamayacağımı ve bu 2 işlevden uzak kaldığımı düşündüm. 'Güncelleme' bölümünde sağladığım gölgelendirici ile mükemmel bir şekilde çalıştı. Teşekkürler yığınları! Cevap kabul edildi. – SparkyNZ

+1

@SparkyNZ: Gölgelendiricilerle çalışmayan tek karışım biçimi, doku "aşamaları" arasında olacaktır. Çok-katlı karışım denklemlerini kendiniz uygulamanız gerekir, fakat kimse bundan şikayet etmez çünkü çok daha güçlüdür. Diğer tüm harmanlanmış sabit işlev kalır: - \ –