如何使用textureID';openGL中的s

如何使用textureID';openGL中的s,opengl,textures,Opengl,Textures,我正在编写一些代码,其中我可以访问的只是一个textureID,以访问所需的纹理。有没有什么方法可以让我访问这个纹理的RGB值,这样我就可以对它进行一些计算 编辑:我正在寻找glTexSubImage2D的倒数。我想获取纹理数据,而不是替换它。您可能正在寻找 在使用glGetTexImage之前,不要忘记与纹理ID一起使用。在OpneGL中,纹理可以分别由函数glGetTextureImage的DSA版本读取 另一种可能是将纹理附加到帧缓冲区并通过读取像素。OpenGL ES不提供glGetTe

我正在编写一些代码,其中我可以访问的只是一个textureID,以访问所需的纹理。有没有什么方法可以让我访问这个纹理的RGB值,这样我就可以对它进行一些计算


编辑:我正在寻找
glTexSubImage2D
的倒数。我想获取纹理数据,而不是替换它。

您可能正在寻找


在使用
glGetTexImage
之前,不要忘记与纹理ID一起使用。

在OpneGL中,纹理可以分别由函数
glGetTextureImage
的DSA版本读取

另一种可能是将纹理附加到帧缓冲区并通过读取像素。OpenGL ES不提供
glGetTexImage
,因此这是OpenGL ES的方法。


如果将纹理图像传输到,则甚至可以通过访问访问数据。另请参见。
您必须将适当大小的缓冲区绑定到目标
GL\u PIXEL\u PACK\u缓冲区

//创建缓冲区
胶合pbo;
glGenBuffers(1和pbo);
glBindBuffer(GLU像素块缓冲区,pbo);
glBufferData(GL像素块缓冲区,大小单位为字节,0,GL静态读取);
//获取纹理图像
glBindTexture(GL_TEXTURE_2D,TEXTURE_obj);
glGetTexImage(GL_纹理_2D,0,GL_RGBA,GL_无符号_字节,(void*)(0));
//地图像素缓冲区
void*data\u ptr=glMapBuffer(GL\u像素\u块\u缓冲区,GL\u只读);
//访问数据
// [...]
glUnmapBuffer(GL像素块缓冲区);

我在这里写这篇文章,以防有人需要

在4.5+OpenGL中,通过使用 功能

例如,为了获得GL_RGB纹理数据, 我们有3个浮点数R、G、B,每个浮点数为4个字节,因此:

float* data = new float[texture_height * texture_width * 3];
glGetTextureImage(textureID, 0, GL_RGB, GL_FLOAT, texture_height * texture_width * 3 * 4, data);

谢谢这正是我想要的。如何获得一块纹理(即矩形)?我认为必须将其渲染到FBO,然后使用glReadPixels读取。