c++ - 为什么opengl中的gl_FragColor与Colorbuffer不同?
问题描述
我想用 glReadPixels() 读取颜色缓冲区中的值,这是我之前通过 gl_FragColor 在 Fragmentshader 中编写的。这平均工作 10 次,然后出现错误值 (1 = 255)。
#version 420
uniform vec2 screenXy;
uniform vec2 screenSize;
out highp vec4 fragColor;
void main(void) {
if((int(gl_FragCoord.x) == int(screenXy.x)) && ((int(screenSize.y - 1) - int(gl_FragCoord.y)) == int(screenXy.y))) {
fragColor.r = 0.5; // any value
} else {
fragColor = vec4(1, 1, 1, 1.0);
}
我将鼠标 xy 坐标提交给片段着色器(screenXy)。如果点击的像素在行中,我会在颜色缓冲区中写入一个值(例如 0.5)。现在我观察到有时值是 1 (= 255) 而不是 0.5 (= 128)。
GLfloat zc[4]; // from color buffer
m_func->glReadPixels(xy.x(), (m_pFbo->height() - 1) - xy.y(), 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, z);
qDebug() << "z0 " << z[0];
我在 win10 和 android 上看到了这种行为。有谁知道我做错了什么?
解决方案
推荐阅读
- c# - 使用 C# 从 SPItemEventProperties 访问上传的 Sharepoint 文件
- r - 如何从 DDMMYYY:HH:MM:SS 将时间从日期时间剥离到 DDMMYYYY
- java - Swagger UI 基本身份验证不起作用,但 curl 可以
- r - 想要摆脱具有某些名称的列
- java - RDF4J 和 GEOSparql 空间函数不起作用(或未实现)
- spring-boot - Spring Boot 2 http.httpBasic().disable(); 不工作
- python - 使用python包pymysql在MySQL数据库中插入错误
- c# - 如何实现接受更多消息的 Socket 服务器
- animation - 当元素在 JavaFX 中获得屏幕边界时,如何停止它?
- python - 在 Python 中将句子的开头大写