2011-08-03 48 views
0

我加載使用PNG一個OpenGL紋理:創建阿爾法使用NSBitmapImageRep

theImage = [NSBitmapImageRep imageRepWithContentsOfFile:imagePath]; 

從中我可以成功地創建一個GL質地和正確渲染,沒有任何透明度。然而,當我切換混合使用:

glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE); 

紋理與正確的透明背景呈現,但是圖像的顏色不正確。

我曾嘗試幾個選項在混合函數,GL_SRC_ALPHAGL_ONE_MINUS_SRC_ALPHAGL_ONEGL_DST_ALPHA

我被教也許我需要在圖像數據重新排序位,也許渠道已經混了,但在這種情況下,如果混合處於關閉狀態,我不會期望它能夠正確顯示。

另外,我可以使用libPNG我猜,但我想嘗試使用NSBitmapImageRep,如果有可能的話。

回答

5

如何提供截圖?


無論如何,您的混合功能對於簡單的透明度通道混合來說都是錯誤的。它應該是

  • 正阿爾法:glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

  • 預乘alpha:glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
+0

指甲,頭,打,,, 我交融FUNC是錯了,但是這固定了它。 謝謝 –

+0

@ BROK3N S0UL:不要忘記接受。 – datenwolf