ใช้เฉพาะพื้นผิวช่องอัลฟ่าใน OpenGL หรือไม่

สวัสดี ฉันกำลังพยายามวาดสีคงที่ให้กับ framebuffer และผสมผสานโดยใช้ช่องอัลฟาจากพื้นผิว RGBA ฉันได้ดู glBlendFunc และ glBlendColor แล้ว แต่ดูเหมือนจะไม่สามารถหาวิธีที่จะเพิกเฉยต่อค่า RGB จากพื้นผิวได้ ฉันคิดว่าฉันจะต้องดึงค่าอัลฟ่าออกมาด้วยตัวเองและสร้างพื้นผิวที่สองด้วย GL_ALPHA มีวิธีที่ดีกว่าในการทำเช่นนี้หรือไม่?

ขอบคุณ!


person Chris    schedule 21.03.2010    source แหล่งที่มา
comment
คำตอบที่ดีที่สุดนั้นค่อนข้างง่าย: ใช้เชเดอร์ ในโค้ด GLSL คุณสามารถใช้ข้อมูลพื้นผิวได้ตามที่คุณต้องการ   -  person Kos    schedule 12.02.2011


คำตอบ (2)


ฉันกำลังใช้การเลือกรหัสสี นี่คือรหัสที่ฉันใช้เพื่อไม่ให้เลือกพื้นที่โปร่งใสของรูปสี่เหลี่ยมที่มีพื้นผิว:

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();

โดยพื้นฐานแล้ว ฉันกำลังบอกว่าฉันต้องการให้ RGB เป็นอะไรก็ได้ก่อนที่จะใช้พื้นผิว (ซึ่งก็คือ myColor) และฉันต้องการให้ ALPHA ถูกนำออกจากพื้นผิว

person ksullivan    schedule 12.02.2011

เมื่อใช้ glBlendFunc คุณสามารถใช้ GL_SRC_ALPHA และ GL_DST_ALPHA เพื่อเลือกช่องอัลฟาในพื้นผิวของคุณได้ (ซึ่งจะเลือกขึ้นอยู่กับการดำเนินการผสมผสานและพื้นผิวของคุณ) ดูบทช่วยสอนการผสมโดยละเอียดเพิ่มเติมที่:

เอกสาร OpenGL ที่เกี่ยวข้อง:

person Clinton    schedule 21.03.2010
comment
glBlendFunc ให้คุณเลือกค่าอัลฟ่าที่แตกต่างกันและวิธีผสมผสานค่าเหล่านั้น แต่เท่าที่ฉันรู้ว่าทั้งหมดนี้ส่งผลต่อวิธีปรับขนาดและรวมสีต้นทางและปลายทาง ฉันกำลังพยายามเพิกเฉยต่อสีต้นฉบับและผสมผสานสีอื่นโดยใช้เฉพาะค่าอัลฟ่าจากพื้นผิว RGBA - person Chris; 21.03.2010
comment
ดูเหมือนว่าคุณกำลังพยายามปกปิดใช่ไหม? ดูลิงก์บทช่วยสอน #3 สำหรับหัวข้อ 'mask on picture' นี่คือสิ่งที่คุณกำลังพยายามทำใช่ไหม? - person Clinton; 21.03.2010