我一直在opengl工作一段時間比較順利,但最近我已經注意到,當我使用透明紋理渲染基本到我的fbo紋理(自定義幀緩衝區)時,它使得fbo紋理在像素處透明,圖元的紋理是透明的。問題是這個原始背後有一些東西(純色)已經在透明之前渲染過了。所以fbo紋理在這些像素處不應該是透明的 - 混合透明色的純色應該會產生純色,不是嗎?將透明紋理渲染到glTexture
所以基本上,opengl爲我的fbo紋理增加了透明度,只是因爲繪製的最後一個原始圖像具有透明像素,即使背後已經有純色,已經繪製到了fbo紋理中。不應該opengl將透明紋理與fbo的現有像素混合在一起,並且如果在渲染透明圖元之前fbo紋理已經用純色填充,則會產生純色?
當我將fbo紋理渲染到默認幀緩衝區時,會發生什麼情況:透明顏色是否會流過其中的一部分 - 最後繪製的紋理透明。但是當我將相同的場景直接渲染到默認的opengl幀緩衝區時,場景看起來很好,並且透明顏色不會滲透到透明紋理中。
更有意思的是,glClearColor - 顏色只在圖元的紋理的alpha具有漸變時可見 - 清晰的顏色對紋理alpha爲1.0或0.0的位置沒有影響...這是一個錯誤嗎?它似乎影響最原始的像素與0.5 alpha的紋理。然後再往上或往下降低glClearColor影響。
我知道這是一個有點複雜的問題/情況,老實說,我盡我所能解釋
我使用:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
繪製兩個部分透明的原始入fbo-質地,然後將FBO紋理默認幀緩衝區
這是被拉入默認的OpenGL FBO的FBO紋理看起來像:
glClearColor設置爲紅色。
在將fbo的紋理繪製到屏幕之前,是否記得重新設置混合?此外,任何代碼或它發生的截圖都會很好。 – Vallentin
您是否驗證過GL_BLEND已啓用? –
截圖添加:)我不想重置混合,因爲我確實想要透明fbo紋理,問題在於fbo紋理透明的地方不應該是透明的,混合使用默認的透明顏色幀緩衝區 – HelloWorldCpp