我正在寫一個基於PyOpenGL的UI來手動對齊圖像。我將兩個圖像顯示爲紋理四邊形,即靜態圖像上的移動圖像。運動圖像以不同的阿爾法表示爲紅色,即glColor4f(1.,0.,0.,overlay_opacity)
,並且靜態圖像以不變的不透明度等於1的青色顯示,即glColor4f(0.,1.,1.,1.)
。然後用戶可以通過鼠標滾動來改變overlay_opacity
,以便在移動圖像和參考圖像之間淡入。opengl:非線性加顏色混合
此刻我正在使用glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)
。雖然這可以讓我在青色和紅色圖像之間平穩淡化,但這也意味着當overlay_opacity
等於0.5時,我只能獲得紅色和青色圖像的最大強度的一半,所以結果看起來很暗淡和泥濘。如果我使用glBlendFunc(GL_SRC_ALPHA,GL_ONE)
,我總是會獲得青色圖像的最大強度,所以我無法淡出它。我真正想要的是某種非線性混合的,看起來像下面的第三個圖表:
我想我也許可以做到這一點的一個片段着色器,但它好像有應該是一個更簡單隻用glBlendFunc()
即可達到同樣的效果。我也試過GL_SRC_ALPHA_SATURATE
,這在我的實現中似乎不起作用。
我只是硬着頭皮做出一個快速着色器。沒有問題,然後關於發生了什麼:) – 2013-04-30 21:51:31
@MichaelDorgan:你無法控制使用着色器混合。即使在現代GPU中,混合仍然是硬件之一。 – datenwolf 2013-04-30 22:55:56