RGB值可以为负值吗?

时间:2015-01-02 16:48:28

标签: opengl

我试图使用glVertex绘制图片。这是我的代码:

struct Pixel{
    GLbyte R, G, B;
};

 GLbyte * originalData = NULL;

 . . . 

 originalData = (GLbyte *)malloc(IMAGE_SIZE);
 fread(originalData, IMAGE_SIZE, 1, file);
  for (int n = 0; n < 256 * 256; n++){
        pixels[n].R = data[n * 3 + 0];
        pixels[n].G = data[n * 3 + 1];
        pixels[n].B = data[n * 3 + 2];

        if (pixels[n].R < (GLbyte)0) std::cerr << "??" << std::endl;
    }

显示功能:

glBegin(GL_POINTS);
unsigned int i = 0;
for (unsigned row = 0; row < iWidth; row++){
    for (unsigned col = 0; col < iHeight; col++){
        glColor3b(pixels[i].R, pixels[i].G, pixels[i].B);
        glVertex3f(row,col,0.0f);
        i++;
    }
}
glEnd();

当我使用glDrawPixels(256, 256, GL_RGB, GL_UNSIGNED_BYTE, originalData);时,一切正常,但是当我使用我的方法时,色彩会混淆。

RGB值可以为负吗?当我使用

glColor3b(abs(pixels[i].R), abs(pixels[i].G), abs(pixels[i].B));

我的输出看起来更好(但是有些颜色混淆了)。

注意1:我试图光栅化我用Photoshop创建的.raw文件

注意2:我知道我的方法是虚拟的,但我正在试验事物

1 个答案:

答案 0 :(得分:4)

您正在使用glColor3b将参数解释为 signed 字节。因此,任何颜色值&gt; = 128都将被解释为负数 - 并在管道中稍后钳制为0(假设合理的默认值)。

由于您要使用全范围0-255,只需使用glColor3ub并使用无符号字节的GLubyte类型。