如何让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();
据我所知,我加载的颜色矩阵应该将三角形更改为黑色,但它似乎不起作用。有什么我想念的吗?
答案 0 :(得分:6)
颜色矩阵仅适用于像当前硬件上没有硬件加速的glDrawPixels等像素传输操作。但是,使用片段着色器实现颜色矩阵非常简单。您可以将矩阵作为统一的mat4传递,然后使用gl_FragColor
答案 1 :(得分:1)
看起来你正确地做了,但你当前的颜色矩阵也将三角形的alpha值设置为0,因此在绘制时它不会出现在屏幕上。
答案 2 :(得分:1)
“此外,如果支持ARB_imaging扩展,则也接受GL_COLOR。”
来自glMatrixMode文档。您的计算机是否支持扩展程序?
答案 3 :(得分:0)
我发现了可能存在的问题。 “图像处理子集”支持颜色矩阵。在大多数硬件中,它由驱动程序支持。(软件实现)
解决方案:
在glEnd()
之后添加此行:
glCopyPixels(0,0, getWidth(), getHeight(),GL_COLOR);
这很慢......