2014-08-28 113 views
1

我正在嘗試渲染一些文本,但此時我正在分別渲染每個字形,這很慢且無效。OpenGL - 將幀緩衝區紋理設置爲完全透明

所以我要改變制度,使文本只是渲染成一個單獨的紋理一次,只要稍有改變,然後紋理應該在主渲染通道屏幕呈現。

到目前爲止,問題是,在主場景中繪製它,我只有兩個選項。我可以指定一個特定的顏色(例如綠色)爲'透明',使用該顏色清除文本的幀緩衝區紋理,繪製文本,然後使用着色器將結果渲染到主場景中,減去透明顏色。

雖然這將工作,我將無法使用該顏色的實際文字了。

相反,我寧願完全清除幀緩衝區紋理的alpha(本質上是爲了得到一個無色的空白板)然後繪製文本,但這似乎不可能?

glColorMask(GL_FALSE,GL_FALSE,GL_FALSE,GL_TRUE); 
glClearColor(0,0,0,0); 
glClear(GL_COLOR_BUFFER_BIT); 

這樣做只會將指定的rgb值與alpha作爲這些顏色的「強度」。在這種情況下,它不會做任何事情,因爲顏色組件被禁用。但是我需要改變幀緩衝區中紋理的alpha值,而不使用glDrawPixels(這太慢了)。

現在,我當然可以編寫一個額外的着色器來將每個片段的alpha值設置爲0,但這看起來不像是有效/快速。

處理這樣的事情的最好方法是什麼?

+1

爲什麼你需要清除alpha?如果字形具有透明度,則應將其透明度值寫入文本FBO。 – 2014-08-28 12:45:44

回答

0

到目前爲止好,問題是,繪製它在主場景中,我只有兩個選項。我可以指定一個特定的顏色(例如綠色)爲'透明',使用該顏色清除文本的幀緩衝區紋理,繪製文本,然後使用着色器將結果渲染到主場景中,減去透明顏色。

你太過於複雜了。如果您將文本/字形渲染爲僅具有一個用作Alpha通道的單個通道的紋理,則會爲您呈現glphys形狀。顏色以頂點屬性的形式進行控制,並在渲染時與紋理中的alpha相結合。

如果您希望獲得幻想,而不是將裸露的字形渲染到紋理,您可能需要生成帶符號的距離場地圖,以節省紋理大小,同時保留高質量的文本輸出。

相關問題