[iphone] 改變OpenGL中的紋理不透明度



Answers

使用紋理組合器。 設置紋理階段在紋理和常量顏色之間執行GL_MODULATE操作。 然後改變代碼中的常量顏色( glTexEnvGL_TEXTURE_ENV_COLOR )。

就性能而言,這應該是“免費”的。 在大多數(如果不是全部的話)圖形芯片組合器操作採用相同數量的GPU週期(通常為1),所以僅使用紋理而不是調製操作(或任何其他操作)的成本是完全相同的。

Question

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




基本上你有兩個選擇:使用glTexEnv為您的紋理使用GL_MODULATE,並使用glColor4 *指定顏色,並為alpha通道使用非透明級別。 請注意,glTexEnv應該只發布一次,當你第一次加載你的紋理。 但是,如果您在頂點屬性中指定顏色,則此方案將不起作用。 這些將覆蓋您可能設置的任何glColor4 *顏色。 在這種情況下,您可能需要使用2個選項之一:使用紋理組合器(高級主題,不適合在固定管道中使用),或者“手動”更改每個單獨頂點的頂點顏色屬性(對於較大的網格)。




最有可能的是你正在使用CG來讓你的圖像進入紋理。 當你使用cg時,alpha是預乘的,所以為什麼你必須使用color4f func的rgba的alpha。




Related