[問題] openGL融合因子

看板C_and_CPP (C/C++)作者 (我想要P幣....Orz)時間13年前 (2012/11/12 22:05), 編輯推噓3(3012)
留言15則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Qt 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) openGL 問題(Question): 是這樣的 小弟剛接觸openGL 最近正在試著練習顏色融合 試驗一下似乎跟書本上的理解不同 程式大約長這樣 glClearColor(1.0f, 0.0f, 0.0f, 1.0f); //設背景為紅色 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ... ... glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ZERO); //設定融合因子 render_part(0.0, 1.0, 0.0, alpha); //設定某區塊顏色為綠色 其中 alpha是設定透明度的值 根據openGL融合規則 最終顯示的RGBA值應為 R = Rs*Fs + Rt*Ft G = Gs*Fs + Gt*Ft B = Bs*Fs + Bt*Ft A = As*Fs + At*Ft (Fs:源因子;Ft:目標因子) 程式最後跑出來 綠色區塊是不會跟紅色做混合 如果根據上式 最終的RGBA應該會與綠色的RGBA值一樣 但不懂為啥alpha設多少都還是顯示綠色? @@ 我的意思是 為啥alpha不管設 1.0, 0.5甚至是0 最後都還是顯示綠色? alpha設為0應該完全看不到綠色呀? 看起來像是GL_ONE會一律將alpha設為1? 請問是我公式理解錯誤還是 openGL函示的實作不同呢? 想了很久都沒頭緒~ 所以就來請教大家了 在此也先謝謝大家的幫忙囉 @@" -- 如果愛情能像物理,我將不再困惑於迷惘 如果物理能解迷情,為了妳,我願意苦讀物理 by 陳碩物理~=.= -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.179.30

11/12 22:26, , 1F
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
11/12 22:26, 1F

11/12 22:35, , 2F
樓上正解
11/12 22:35, 2F

11/12 22:46, , 3F
感謝樓上回覆 @@ 但我就是希望我的綠色區塊不要受背景
11/12 22:46, 3F

11/12 22:47, , 4F
影響~這樣我要怎麼做呢? 有試過glDisable(glBlend)也一樣
11/12 22:47, 4F

11/12 22:49, , 5F
blending就是兩色混合 你不和背景合 要和哪個顏色合?
11/12 22:49, 5F

11/12 22:53, , 6F
如果你是要疊加的話 glBlendFunc(GL_SRC_ALPHA, GL_ONE)
11/12 22:53, 6F

11/12 23:26, , 7F
抱歉~我應該再說清楚點@@" 其實原本的目的是希望可以不管
11/12 23:26, 7F

11/12 23:26, , 8F
背景,然後融合我想要的區塊,例如說背景是紅色,第一個
11/12 23:26, 8F

11/12 23:27, , 9F
區塊是綠色,第二個區塊是藍色會跟綠色某些部分重疊
11/12 23:27, 9F

11/12 23:29, , 10F
則最後會看到青綠色(藍色綠色混) 但綠色跟藍色不會跟紅色
11/12 23:29, 10F

11/12 23:30, , 11F
混,而是各自保有原本的顏色~當然這只是簡單舉例而已啦@@
11/12 23:30, 11F

11/12 23:31, , 12F
我只是很好奇為啥一剛開始的設定好像會沒有作用
11/12 23:31, 12F

11/12 23:32, , 13F
想說是不是我觀念理解錯誤之類的^^" 還是謝謝樓上大大囉
11/12 23:32, 13F

11/13 00:06, , 14F
這要分開 先用render to texture畫到另一張framebuffer
11/13 00:06, 14F

11/13 00:06, , 15F
然後關掉blending再把這張畫布貼到背景上
11/13 00:06, 15F
文章代碼(AID): #1GeG8nWD (C_and_CPP)
文章代碼(AID): #1GeG8nWD (C_and_CPP)