渲染到帧缓冲区时,灰色材质显示为深色
Gray materials appear to dark when rendering to framebuffer
当我指定任何绝对灰色的材料时,如:
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将色彩空间缩小为灰色
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 程序崩溃并显示"std::out_of_range"错误
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 从数据库实时显示QT c++中的数据
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 显示错误输出的简单数组排序程序
- Qt自定义QPush按钮未显示在布局上
- 禁用 CListCtrl 自定义绘制函数中的行或将其显示为灰色
- OpenGL 反射着色器仅显示灰色
- 渲染到帧缓冲区时,灰色材质显示为深色
- eclipse(stm32)Why中的项目资源管理器中,一些stderivi文件显示为灰色
- 显示“是/否”提示框,其中“否”显示为灰色
- cvLoadImage() + cvShowImage()从openCV显示灰色框
- 为什么从Project Tango Tablet中提取的图像显示为灰色
- Visual Studio下拉菜单中显示为灰色的类方法