我对这两个的用法以及它们如何影响纹理有几个问题。
像素的顺序到底是什么?像素是通过一个连续的缓冲区提供的。纹理以什么顺序读取它们,以便将它们分布到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];
1条答案
按热度按时间nle07wnf1#
参考文献对此非常明确:
glTexImage2D
说明
最后三个参数(format,type,data)描述图像在内存中的表示方式。
如果target是GL_TEXTURE_2D,...,则根据 type,从 data 读取数据,作为有符号或无符号字节、短整型或长整型或单精度浮点值的序列。根据 format,这些值分组为一个、两个、三个或四个值的集合,以形成元素。
第一个元素对应于纹理图像的左下角。随后的元素从左到右依次通过纹理图像最低行中的其余纹素,然后依次通过纹理图像的较高行。最后一个元素对应于纹理图像的右上角。