我正在从帧缓冲区读取像素数据,一切似乎都有效,除了alpha值,总是1.0
GLfloat lebuf[areasize * 4];
glReadPixels(xstart, ystart, partw, parth, GL_RGBA, GL_FLOAT, lebuf);
我已设置窗口创建代码以支持Alpha通道:
SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8);
还有其他地方我应该查看为什么alpha通道似乎一直是1.0吗?更好的是,还有另一种方法(除了glReadPixels)从帧缓冲区获取纹理到客户端内存中吗?
编辑:这就是我清除缓冲区的方式:
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
答案 0 :(得分:6)
你能查一下:
glGetIntegerv(GL_ALPHA_BITS, bits)
)?glClearColor
)。如果在渲染之前清除0.5并检索缓冲区,该怎么办?你检索0.5?glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE)
)?答案 1 :(得分:3)
如果您正在使用GLUT,请记住您必须按如下方式设置主窗口:
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_ALPHA | GLUT_DEPTH | GLUT_STENCIL);
否则glReadPixels将始终读取alpha通道= 1。
答案 2 :(得分:0)
请使用以下行..问题将解决。
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_ALPHA | GLUT_DEPTH | GLUT_STENCIL);