簡體   English   中英

如何使用Alpha渲染紋理?

[英]How to render a texture with alpha?

如何使用Alpha渲染紋理?

我有一個紋理,需要在不同位置使用不同的alpha值渲染它。 有辦法嗎? (我的紋理是GL_RGBA)

如果無法即時更改Alpha值,我必須為不同的Alpha級別創建不同的紋理嗎?

首先,請確保您的紋理具有Alpha通道。 您提到要加載RGBA格式,但是在圖像編輯程序中檢查原始文件總是很好的。 然后確保紋理准備好在openGL中渲染。 一個常見的錯誤是忘記通過glTexParameter*設置紋理的過濾模式。 它從需要mipmap的設置開始,因此我發現最簡單的方法是:

glTexParameteri(GL_TEXTURE_2D, GL_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_MAG_FILTER, GL_LINEAR);

其次,您將需要設置openGL以准備進行混合。 這涉及到使用GL_BLENDglEnable調用和一個glBlendFunc調用。 大多數時候,您會希望函數調用為glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ,因為大多數其他令牌組合將給您帶來不一樣的效果(有關更多信息,請參見glBlendFunc規格頁面)。

最后,確保要在不同點采樣紋理。 如果使用即時模式(使用glVertex*繪制場景),則需要在調用glVertex*之前使用glTexGen*或使用glTexCoord*手動指定紋理點。 如果使用數組數據繪制場景,請確保已使用glEnableClientState(GL_TEXTURE_COORD_ARRAY)glTexCoordPointer啟用紋理指針。

您質地GL_RGBA所以對於每個紋理元素不同的alpha值。

如果要更改用於渲染的Alpha值,可以考慮以下方法:

  • 更改紋理的Alpha值(不確定是否要說的話)。
  • 使用glColor4f更改頂點的alpha值。 它將乘以紋理值。 您可能需要使用glEnable(GL_COLOR_MATERIAL)和/或glColorMaterial()
  • 使用頂點着色器更改頂點Alpha值。 它將乘以紋理值。
  • 使用片段着色器動態更改采樣的紋理值。
  • 使用兩個紋理階段並將它們相乘。 第二個將具有修改后的alpha值(請參閱glActiveTexture()和好友)。
  • 使用片段着色器和兩個(或更多)紋理階段。 這是最酷的!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM