iphone es教學 - 改變OpenGL中的紋理不透明度




4 Answers

我不知道OpenGL ES,但在標準的OpenGL中,您可以在使用之前聲明紋理的顏色來設置不透明度:

//          R,   G,   B,   A
glColor4f(1.0, 1.0, 1.0, 0.5);

這個例子會給你50%的alpha值,而不會影響紋理的顏色。 通過調整其他值,您也可以移動紋理顏色。

ios swift

這是一個希望的簡單問題:我有一個OpenGL紋理,並希望能夠改變其不透明度,我該怎麼做? 紋理已經有一個alpha通道和混合工作正常,但我希望能夠減少整個紋理的不透明度,淡入到背景。 我用glBlendFunc ,但沒有運氣 - 似乎我需要像GL_SRC_ALPHA_MINUS_CONSTANT ,這是不可用的東西。 我正在使用OpenGL ES開發iPhone。




謝謝大家的想法。 我已經玩glColor4f和glTexEnv,並最終強迫自己仔細閱讀glTexEnv手冊頁。 該手冊頁說,在GL_MODULATE紋理模式中,結果顏色是通過將輸入片段乘以紋理顏色(C = Cf×Ct)來計算的,對於alpha也是如此。 我嘗試了glColor4f(1,1,1,不透明),但沒有奏效,但將所需的不透明度傳遞給調用的所有四個參數。 (但是不知道為什麼。)




最直接的方法是即時更改紋理的alpha值。 由於您在某個時候告訴OpenGL關於紋理的信息,因此您將在內存中使用位圖。 所以只需將紋理重新綁定到相同的紋理ID。 如果你沒有在內存中(由於空間的限制,因為你在ES上),你可以使用glGetTexImage()函數再次將紋理檢索到緩衝區。 這是乾淨的解決方案。

然而,保存/檢索操作有點貴,所以你可能需要另一種解決方案。 考慮一下,你可能能夠在你的幾何圖形後面顯示你的紋理,或者簡單地處理保存紋理的幾何體的材質/顏色。 你可能會想要有一些加法混合的後面的幾何。 使用glBlendFunc

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA),

您可能能夠“輕鬆”,更重要的是便宜 - 達到預期的效果。




我懷疑你有一個黑色背景,因此通過減少每種顏色的數量,你有效地將顏色淡化成黑色。




Related

iphone opengl-es