【发布时间】:2014-10-27 08:37:30
【问题描述】:
当我指定任何绝对灰色的材质时:
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) 有同样的问题吗?
例如,如果我稍微改变一下diffuseColor:
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);
【问题讨论】:
-
您的帧缓冲区设置是什么样的(目标渲染缓冲区或纹理和 FBO)。也许你不知何故进入了 sRGB 模式,这可能会导致这种情况。
-
如何切换到 sRGB 模式?我认为这是可能的。