opengl glteximage2d和gltexsubimage2d的像素顺序是什么?

bsxbgnwa  于 2022-12-12  发布在  其他
关注(0)|答案(1)|浏览(252)

我对这两个的用法以及它们如何影响纹理有几个问题。
像素的顺序到底是什么?像素是通过一个连续的缓冲区提供的。纹理以什么顺序读取它们,以便将它们分布到x和y平面?
这些方法也接受了一个类型参数,每个像素有3个值吗?因为当我们在着色器中使用texture(uvMap, textureUV)方法时,它会返回一个浮点数的vec3。那么我们通过glteximage2d和gltexsubimage2d提供给纹理的数据在open gl中是如何读取和组织的呢?
这是我的假设,如果我错了请纠正我:
数据缓冲区包含像素数据。每个像素由通过glteximage2d和gltexsubimage2d方法发送的类型的3个值表示。因此,我们提供的缓冲区中需要有3 * 宽度 * 高度的值。OpenGL读取缓冲区的方式如下(伪代码):

for(int y range 0 and height)
 for(int x range 0 and width)
   int index= (y * (width * 3))  + (x * 3);
   pixels[y][x].x = buffer[index + 0];
   pixels[y][x].y = buffer[index + 1];
   pixels[y][x].z = buffer[index + 2];
nle07wnf

nle07wnf1#

参考文献对此非常明确:
glTexImage2D

说明

最后三个参数(format,type,data)描述图像在内存中的表示方式。
如果target是GL_TEXTURE_2D,...,则根据 type,从 data 读取数据,作为有符号或无符号字节、短整型或长整型或单精度浮点值的序列。根据 format,这些值分组为一个、两个、三个或四个值的集合,以形成元素。

第一个元素对应于纹理图像的左下角。随后的元素从左到右依次通过纹理图像最低行中的其余纹素,然后依次通过纹理图像的较高行。最后一个元素对应于纹理图像的右上角。

  • format* 决定了 data 中每个元素的组成。它可以采用以下符号值之一:......(为了简短,我不会在这里列出元素,但它是必读的)

相关问题