2010-10-07 25 views
2

我有一個字體紋理,我使用它來在我的OpenGL場景上繪製文本。 問題是,場景的顏色差異很大,我使用的任何純色都難以閱讀。是否有可能使用倒置的顏色繪製我的字體紋理?OpenGL場景頂部的倒色文本

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);的調用將只用純色繪製,以glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO);的調用將繪製反轉,但會忽略紋理的α值,所以你會只看到一個倒置的長方形而不是字母。

我需要的是可以這樣不使用着色器莫名其妙取得了一些相當於 glBlendFunc(GL_SRC_ALPHA * GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA);

+1

爲什麼你不能只使用亮度紋理和glBlendFunc(GL_ONE_MINUS_DEST_COLOR,GL_ONE_MINUS_SRC_COLOR)? – dave 2010-10-08 00:31:21

回答

0

複製想要覆蓋的屏幕的小節,可以使用CPU來反轉此複製的部分。使用文本作爲蒙版,將新制作的倒立紋理繪製到屏幕上。

請注意,這很慢,毫無疑問着色器會更快。

3

問題已解決。

繼Dave的我原來的評論: 而不是使用GL_ALPHA紋理我產生GL_RGBA紋理,其中每個像素等於: (α,α,α,0xFF的)(這是一個灰度圖像,而不是亮度的圖片)。 然後我用這個紋理:

glBlendFunc(GL_ONE_MINUS_DST_COLOR,GL_ONE_MINUS_SRC_COLOR);其結果是:(1-dest_color)x「src_alpha」+ dest_color x(1 - 「src_alpha」) 這正是我所需要的。

謝謝! Ron