Gunakan hanya tekstur saluran alfa di OpenGL?

Hai, saya mencoba menggambar warna konstan ke framebuffer dan memadukannya menggunakan saluran alfa dari tekstur RGBA. Saya telah melihat glBlendFunc dan glBlendColor, tetapi sepertinya tidak menemukan cara untuk mengabaikan nilai RGB dari tekstur. Saya pikir saya harus mengeluarkan sendiri nilai alpha dan membuat tekstur kedua dengan GL_ALPHA. Apakah ada cara yang lebih baik untuk melakukan ini?

Terima kasih!


person Chris    schedule 21.03.2010    source sumber
comment
Jawaban terbaiknya cukup sederhana: Gunakan shader. Dalam kode GLSL Anda dapat menggunakan data tekstur dengan cara apa pun yang Anda bayangkan.   -  person Kos    schedule 12.02.2011


Jawaban (2)


Saya menggunakan pemilihan kode warna. Ini adalah kode yang saya gunakan sehingga area transparan pada segi empat bertekstur tidak akan diambil:

glEnable(GL_COLOR_MATERIAL);
glEnable(GL_TEXTURE_2D);
glEnable(GL_ALPHA_TEST);

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);

glAlphaFunc(GL_GREATER, 0.5f);

glColor3ub(myColor[0], myColor[1], myColor[2]);

drawTexturedQuad();

Pada dasarnya saya mengatakan saya ingin RGB menjadi apa pun sebelum menerapkan tekstur (Ini akan menjadi myColor) dan saya ingin ALPHA diambil dari teksturnya.

person ksullivan    schedule 12.02.2011

Saat menggunakan glBlendFunc, GL_SRC_ALPHA dan GL_DST_ALPHA dapat digunakan untuk memilih saluran alfa dalam tekstur Anda (yang dipilih bergantung pada operasi campuran dan tekstur Anda). Untuk tutorial pencampuran lebih rinci lihat:

Dokumentasi OpenGL yang relevan:

person Clinton    schedule 21.03.2010
comment
glBlendFunc memungkinkan Anda memilih nilai alfa yang berbeda dan cara memadukannya, namun sejauh yang saya tahu, semuanya memengaruhi cara Anda menskalakan dan menggabungkan warna sumber dan tujuan. Saya mencoba mengabaikan warna sumber dan memadukan warna lain hanya dengan menggunakan nilai alpha dari tekstur RGBA. - person Chris; 21.03.2010
comment
Sepertinya Anda mencoba menutupinya? Lihat link tutorial #3 untuk bagian 'mask pada gambar'. Apakah ini yang Anda coba lakukan? - person Clinton; 21.03.2010