RGB 值可以为负数吗?
Can RGB values be negative?
我正在尝试使用 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: 我知道我的方法是假的,但我正在试验一些东西
您正在使用 glColor3b
,它将参数解释为 有符号 字节。因此任何 >= 128 的颜色值都将被解释为负值 - 并在稍后的管道中被限制为 0(假设合理的默认值)。
因为你想使用整个范围 0-255,只需使用 glColor3ub
并使用 GLubyte
类型 unsigned 字节。
我正在尝试使用 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: 我知道我的方法是假的,但我正在试验一些东西
您正在使用 glColor3b
,它将参数解释为 有符号 字节。因此任何 >= 128 的颜色值都将被解释为负值 - 并在稍后的管道中被限制为 0(假设合理的默认值)。
因为你想使用整个范围 0-255,只需使用 glColor3ub
并使用 GLubyte
类型 unsigned 字节。