opengl - RGB 值可以为负数吗?

标签 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:我知道我的方法是假的,但我正在试验一些东西

最佳答案

您正在使用 glColor3b,它将参数解释为有符号 字节。因此,任何 >= 128 的颜色值都将被解释为负值 - 并稍后在管道中固定为 0(假设合理的默认值)。

因为你想使用整个范围 0-255,只需使用 glColor3ub 并使用用于 unsigned 字节的 GLubyte 类型。

关于opengl - RGB 值可以为负数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27745523/

相关文章:

python - PyOpenGL Texture_3D 和 Numpy 不渲染

c++ - OpenGL三角形未绘制

OpenGL - gluPerspective/glFrustum - zNear & zFar 问题

c++ - 设置 QSurfaceFormat 无效

macos - glutPassiveMotionFunc和glutWarpMousePointer

opengl - 为什么调用透视函数会让我黑屏?

opengl - 在 OpenGL 中找不到属性变量,可能的优化

c++ - OpenGL:渲染天空盒 cubmap 问题

c++ - Qt3d。在三角形上绘制透明的QSphereMesh

python - 如何调整 GLUT 窗口的大小?