OpenGL颜色矩阵

时间:2009-04-25 23:03:25

标签: c++ opengl colors

如何让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();

据我所知,我加载的颜色矩阵应该将三角形更改为黑色,但它似乎不起作用。有什么我想念的吗?

4 个答案:

答案 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);

这很慢......