[英]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_BLEND
的glEnable
調用和一個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值,可以考慮以下方法:
glColor4f
更改頂點的alpha值。 它將乘以紋理值。 您可能需要使用glEnable(GL_COLOR_MATERIAL)
和/或glColorMaterial()
。 glActiveTexture()
和好友)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.