渲染到帧缓冲区时,灰色材质显示为深色

Gray materials appear to dark when rendering to framebuffer

本文关键字:显示 灰色 缓冲区      更新时间:2023-10-16

当我指定任何绝对灰色的材料时,如:

 glAmbientColor [0] = 0.2;
 glAmbientColor [1] = 0.2;
 glAmbientColor [2] = 0.2;
 glAmbientColor [3] = 1;
 glDiffuseColor [0] = 0.8;
 glDiffuseColor [1] = 0.8;
 glDiffuseColor [2] = 0.8;
 glDiffuseColor [3] = 1;
 glSpecularColor [0] = 0.2;
 glSpecularColor [1] = 0.2;
 glSpecularColor [2] = 0.2;
 glSpecularColor [3] = 1;
 glEmissiveColor [0] = 0;
 glEmissiveColor [1] = 0;
 glEmissiveColor [2] = 0;
 glEmissiveColor [3] = 1;

并使用渲染对象

 glEnable (GL_LIGHTING);
 glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT,   glAmbientColor);
 glMaterialfv (GL_FRONT_AND_BACK, GL_DIFFUSE,   glDiffuseColor);
 glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR,  glSpecularColor);
 glMaterialfv (GL_FRONT_AND_BACK, GL_EMISSION,  glEmissiveColor);
 glMaterialf  (GL_FRONT_AND_BACK, GL_SHININESS, 0.2);

对于自定义帧缓冲区,灰色材料看起来很暗,即具有更高的对比度。渲染到默认帧缓冲区可以使材质正常显示。任何其他完全为灰色的材质都将始终正常渲染。

我没有特殊的OpenGL选项集。我总是在法线上使用glEnable(GL_NORMALIZE)。

我必须用一种特殊的方式配置我的帧缓冲区吗?有人对NVidia显卡和最新驱动程序(331.89)有同样的看法吗?

例如,如果我稍微改变漫反射颜色,比如:

glDiffuseColor [0] = 0.8 + 0.0001;

材质始终呈现为正常!

我创建如下所示的帧缓冲区:

    glGenFramebuffers (1, &id);
    // Bind frame buffer.
    glBindFramebuffer (GL_FRAMEBUFFER, id);
    // The color buffer
    glGenRenderbuffers (1, &colorBufferId);
    glBindRenderbuffer (GL_RENDERBUFFER, colorBufferId);
    glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA8, width, height);
    glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorBufferId);
    // The depth buffer
    glGenRenderbuffers (1, &depthBufferId);
    glBindRenderbuffer (GL_RENDERBUFFER, depthBufferId);
    glRenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height);
    glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBufferId);

我自己发现,它与帧缓冲区无关。一切都很好。该问题首先发生在图像后处理过程中,因为图像保存为单色PNG,而不是RGB PNG。

实际上是这个问题:ImageMagick将色彩空间缩小为灰色