- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法将立方体贴图读回 CPU。当我将数据传递给 glTexImage2D
中的立方体贴图时调用,可以毫无问题地读回此数据。但是当我渲染到立方体贴图时,只有立方体贴图的正 x 侧包含敏感数据。其他一切都是 0(而不是未初始化)。
我正在使用分层渲染渲染到立方体贴图,然后通过在着色器中对其进行采样来检查立方体贴图的内容。我得到的是正确的。但是glGetTexImage
似乎不像我想象的那样工作。
当我调用 glGetTexImage
时没有绑定(bind)帧缓冲区建议: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);
最佳答案
我在这里找到了答案:
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
关于opengl - 如何使用 glGetTexImage 从立方体贴图读取数据到 OpenGL 中的 CPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36886169/
我需要从大纹理 (2048x2048) 中提取一个较小的矩形 (200x200),并将 RGBA 像素放入内存中。似乎有两种方法可以做到这一点: a) 使用 glGetTexImage 并传入接收整个
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 10 个月前
我对 OpenGL 和 glGetTexImage() 有疑问。 我想获取我之前创建的纹理的像素代码如下: glGenTextures(1, &texture); glBindTexture(GL_T
我正在尝试通过 glGetTexImage 检索纯 alpha 纹理的像素信息。 问题是,glGetTexImage-Call 似乎比它应该读取的数据多,导致内存损坏和 delete[]-Call 崩
我在某些 ATI 卡(Radeon X1650、X1550 + 等)上遇到了难题。 消息是:“模块'atioglxx.dll'中地址6959DD46的访问冲突。读取地址00000000” 它发生在这一
在了解到我必须使用 FBO 之后从着色器读取 float 据,我试过这个但没有运气: glGenTextures( 1, &renderTex ); glBindTexture( GL_TEXTU
我无法将立方体贴图读回 CPU。当我将数据传递给 glTexImage2D 中的立方体贴图时调用,可以毫无问题地读回此数据。但是当我渲染到立方体贴图时,只有立方体贴图的正 x 侧包含敏感数据。其他一切
我写了一些代码,太长无法粘贴到这里,它通过使用无绑定(bind) imageLoad 和 imageStore 的片段着色器渲染到 3D 1 组件浮点纹理。 该代码绝对有效。 然后我需要解决一些 GL
我使用该函数从显卡获取我的纹理,但出于某种原因,如果 miplevel > 0,它不会在某些卡上返回任何内容 这是我用来获取图像的代码: glGetTexImage(GL_TEXTURE_2D, mi
我是一名优秀的程序员,十分优秀!