2010-10-23 90 views

回答

0

沒有,所有顏色都分開。你需要一個像素着色器的那個

0

嗯,也許如果它被渲染成一個光度+ alpha的FBO,然後繪製?

那麼,無論是或複製到這樣的紋理,然後紋理回到FBO - 這就是說,在大多數情況下,FBO將是一個更好的解決方案(如果可用)。

請注意,我沒有測試過這個。

+0

可以創建這樣的FBO嗎? – 2010-10-24 11:35:57

+0

也許你可以渲染到亮度+ alpha紋理 – 2010-10-24 11:36:23

+0

是的,這就是我的意思 - FBO基本上就是這樣,渲染到紋理。如果失敗,請嘗試正常的複製到紋理,然後將其複製回幀緩衝區。我應該自己嘗試一下......哦,根據您的要求,alpha可能需要也可能不需要。 – 2010-10-25 17:18:11

0

實際上,爲了完整起見,我會提到如果支持GL_ARB_imaging擴展,有一種可能的解決方案:GL_COLOR_MATRIX,它轉換傳入的RGBA值。你可以在上面3x3矩陣設置爲全1/3.0,像這樣:

GLFloat graymat[] = {.33,.33,.33,0,.33,.33,.33,0,.33,.33,.33,0,0,0,0,1}; 
glMatrixMode(GL_COLOR_MATRIX) 
glLoadIdentity() 
glMultMatrixf(graymat) 

但是偉大的這聽起來可能,但是,並非所有的驅動程序支持這個硬件,這意味着,根據您的OpenGL實現,你的驅動程序可能:A)完全忽略顏色矩陣,B)回退到軟件渲染,或者C)(如果擴展不支持)引發一個GLError。

如果您正在爲有限的一組平臺編寫代碼,並且它們支持此擴展,那麼這將是最簡單的方法。否則,你需要另一種方法。