OpenGL 貼帶透明度的紋理碰到的問(wèn)題

使用OpenGL貼紋理時(shí),圖片是一張周邊帶有漸變透明度的圖,顯示出來(lái)后圖片透明度的地方顯示是灰黑色。采用的顏色混合方法是:glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)。因?yàn)橛眠@個(gè)來(lái)處理半透明的圖像,則ColorResult = SrcColor * SrcAlpha + DstColor * (1 - SrcAlpha),這時(shí)SrcAlpha就剛好被解析為透明度了。

但是實(shí)際中在繪制一張半透明的png圖片時(shí),半透的地方都變灰了。查到的原因是在加載圖像時(shí)使用Premultiplied Alpha所致。

Premultiplied Alpha是預(yù)先將RGBA中A通道,分配給顏色通道。經(jīng)過(guò)Premultiplied Alpha處理之后,所有的顏色通道都會(huì)乘以alpha因子。實(shí)際上Premultiplied Alpha所作的便是 SrcColor1 = SrcColor0 * SrcAlpha操作。這樣一來(lái),半透明混合所要做的操作就應(yīng)該是:ColorResult = SrcColor1 + DstColor * (1 - SrcAlpha).

即顏色混合方式是:glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)


但是加載進(jìn)來(lái)的圖片是啥時(shí)候被Premultiplied Alpha?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.OpenGLES提供了一個(gè)為幾何圖形中的每個(gè)頂點(diǎn)設(shè)置不同顏色的方法。 2.紋理可以控制一個(gè)渲染的三角形中的每個(gè)...
    碧玉小瑕閱讀 476評(píng)論 0 0
  • 混合 在OpenGL中,物體透明技術(shù)通常被叫做混合(Blending)。透明的物體(或物體的一部分)非純色而是混合...
    IceMJ閱讀 3,247評(píng)論 1 4
  • 什么是紋理 紋理是一個(gè)用來(lái)保存圖像的顏色色素值得OpenGL ES緩存, 紋理的作用是為了使我們渲染的幾何圖像更加...
    冰三尺閱讀 770評(píng)論 0 1
  • 對(duì)于一幅圖像來(lái)說(shuō),可以看做是一個(gè)二維像素點(diǎn)的矩陣。剪紙效果的紋理貼圖是指一張圖片有的像素點(diǎn)正常顯示,有的像素點(diǎn)則不...
    zyl06閱讀 822評(píng)論 0 0
  • 紋理 紋理是用來(lái)保存圖像顏色元素之的OpenGL ES 緩存.當(dāng)用一個(gè)圖像初始化一個(gè)紋理緩存之后,在這個(gè)圖像的中的...
    螻蟻撼樹(shù)閱讀 903評(píng)論 0 1

友情鏈接更多精彩內(nèi)容