如何使用alpha渲染紋理?如何渲染帶有alpha的紋理?
我有一個紋理,需要在不同的位置使用不同的alpha值來渲染它。任何方式來這樣做? (我的紋理是GL_RGBA)
如果無法在飛行中更改alpha值,我必須爲不同的alpha級別創建不同的紋理?
如何使用alpha渲染紋理?如何渲染帶有alpha的紋理?
我有一個紋理,需要在不同的位置使用不同的alpha值來渲染它。任何方式來這樣做? (我的紋理是GL_RGBA)
如果無法在飛行中更改alpha值,我必須爲不同的alpha級別創建不同的紋理?
您的紋理是GL_RGBA,所以它具有爲每個紋理元素不同的alpha值。
如果要更改用於渲染的阿爾法值,我能想到以下方法:
glColor4f
更改頂點的alpha值。它會乘以紋理值。您可能需要使用glEnable(GL_COLOR_MATERIAL)
和/或glColorMaterial()
。glActiveTexture()
和朋友)。首先,確保你的紋理有一個alpha通道。您提到您正在加載RGBA格式,但在圖像編輯程序中檢查原始文件總是很好。然後確保您的紋理已準備好在openGL中渲染。一個常見的錯誤是忘記通過glTexParameter*
設置紋理的過濾模式。它開始於需要的貼圖的設置,所以我覺得這是最容易入手:
glTexParameteri(GL_TEXTURE_2D, GL_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_MAG_FILTER, GL_LINEAR);
其次,你將需要設置的openGL以準備混合。這涉及與GL_BLEND
和glBlendFunc
呼叫的glEnable
呼叫。大多數情況下,您會希望函數調用爲glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
,因爲大多數其他的令牌組合會爲您提供以後沒有的效果(有關更多信息,請參閱glBlendFunc
規範頁面)。
最後,確保您在不同的點對您的紋理進行採樣。如果您正在使用即時模式(使用glVertex*
繪製場景),則需要使用glTexGen*
或在致電glVertex*
前使用glTexCoord*
手動指定紋理點。如果使用陣列數據繪製場景,請確保使用glEnableClientState(GL_TEXTURE_COORD_ARRAY)
和glTexCoordPointer
啓用了紋理指針。
什麼結構保存圖像? –
我有一個DIB數據(從HBITMAP轉換而來),然後我從DIB創建紋理,但是創建紋理之後剛剛刪除了DIB數據。 (即:免費(dib_data_handle);) – jondinham