我无法将立方体贴图读回CPU.当我在glTex
Image2D调用中将数据传递给立方体贴图时,可以毫无问题地回读这些数据.但是当我渲染到立方体贴图时,只有立方体贴图的正x面包含合理的数据.其他一切都是0(而不是未初始化).
我使用分层渲染渲染到立方体贴图,然后通过在着色器中从中采样来检查立方体贴图的内容.我到那里是正确的.但glGetTexImage似乎没有像我想象的那样工作.
当我按照以下建议调用glGetTexImage时,没有绑定帧缓冲:www.gamedev.com
我做错了吗?有人知道这里可能出了什么问题吗?
glGenTextures(1, &c_cubemap);
glBindTexture(GL_TEXTURE_CUBE_MAP, c_cubemap);
// load data ...
auto width = positiveX->width;
auto height = positiveX->height;
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB16F, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, ...);
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB16F, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, ...);
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB16F, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, ...);
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB16F, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, ...);
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB16F, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, ...);
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB16F, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, ...);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_REPEAT);
// Here, the rendering takes place.
auto size = width * height * 3;
auto bufferPositiveX = new float[size];
auto bufferNegativeX = new float[size];
auto bufferPositiveY = new float[size];
auto bufferNegativeY = new float[size];
auto bufferPositiveZ = new float[size];
auto bufferNegativeZ = new float[size];
glBindTexture(GL_TEXTURE_CUBE_MAP, c_cubemap);
glGetTexImage(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, GL_FLOAT, bufferPositiveX);
glGetTexImage(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, GL_FLOAT, bufferNegativeX);
glGetTexImage(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, GL_FLOAT, bufferPositiveY);
glGetTexImage(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, GL_FLOAT, bufferNegativeY);
glGetTexImage(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, GL_FLOAT, bufferPositiveZ);
glGetTexImage(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, GL_FLOAT, bufferNegativeZ);
glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
我正在使用NVIDIA GeForce GTX 780.驱动程序版本是364.72.
最佳答案 我在这里找到了答案:
https://www.opengl.org/sdk/docs/man/html/glGetTexImage.xhtml
它说:
“如果对立方体贴图纹理对象使用glGetTextureImage,纹理将被视为深度为6的三维图像,其中立方体贴图面按照下表中显示的顺序排列为图像层:
Layer number Cube Map Face
0 GL_TEXTURE_CUBE_MAP_POSITIVE_X
1 GL_TEXTURE_CUBE_MAP_NEGATIVE_X
2 GL_TEXTURE_CUBE_MAP_POSITIVE_Y
3 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
4 GL_TEXTURE_CUBE_MAP_POSITIVE_Z
5 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z