2009-04-25 234 views
1

如何獲得OpenGL顏色矩陣轉換工作?OpenGL顏色矩陣

我修改了一個示例程序,只繪製了一個三角形,並添加了一些顏色矩陣代碼,以查看是否可以更改三角形的顏色,但似乎不起作用。

static float theta = 0.0f; 
glClearColor(1.0f, 1.0f, 1.0f, 1.0f); 
glClearDepth(1.0); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

glPushMatrix(); 
glRotatef(theta, 0.0f, 0.0f, 1.0f); 
glMatrixMode(GL_COLOR); 

GLfloat rgbconversion[16] = 
{ 
    0.0f, 0.0f, 0.0f, 0.0f, 
    0.0f, 0.0f, 0.0f, 0.0f, 
    0.0f, 0.0f, 0.0f, 0.0f, 
    0.0f, 0.0f, 0.0f, 0.0f 
}; 
glLoadMatrixf(rgbconversion); 
glMatrixMode(GL_MODELVIEW); 

glBegin(GL_TRIANGLES); 
glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(0.0f, 1.0f , 0.5f); 
glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(0.87f, -0.5f, 0.5f); 
glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(-0.87f, -0.5f, 0.5f); 
glEnd(); 
glPopMatrix(); 

據我所知,我加載的顏色矩陣應該將三角形改爲黑色,但似乎並不奏效。有什麼我失蹤?

回答

6

顏色矩陣僅適用於像素傳輸操作,例如在當前硬件上未硬件加速的glDrawPixels。但是,使用片段着色器實現顏色矩陣非常簡單。你可以通過你的矩陣作爲一個統一的mat4,然後與它重疊gl_FragColor

1

看起來你正在做的是正確的,但是你當前的顏色矩陣也將三角形的alpha值設置爲0,所以當它被繪製時,它不會出現在屏幕上。 「

+0

其實,三角形仍然是繪製成原來的紅色,綠色和藍色,所以我不相信顏色矩陣會影響alpha分量。 – 2009-04-27 15:34:40

+0

如果啓用了透明度,alpha組件將僅影響最終圖像,但顯然不是。 – AndyG 2009-04-28 17:48:21

1

」此外,如果支持ARB_imaging擴展,GL_COLOR也被接受。「

來自glMatrixMode文檔。您的機器是否支持擴展?

0

我發現了可能的問題。 顏色矩陣由「圖像處理子集」支持。在大多數的硬件,它是由驅動程序(軟件實現)支持

解決方案: 加入這一行glEnd()後:

glCopyPixels(0,0, getWidth(), getHeight(),GL_COLOR); 

這是非常慢....