OpenGL纹理数据的方向是什么?
考虑下面的代码,它创建了一个32位16x16纹理,它不会重复:OpenGL纹理数据的方向是什么?,opengl,textures,Opengl,Textures,考虑下面的代码,它创建了一个32位16x16纹理,它不会重复: int pixels[256]; glTexImage2D(GL_TEXTURE_2D, 0, 4, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP)
int pixels[256];
glTexImage2D(GL_TEXTURE_2D, 0, 4, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
使用此纹理渲染三角形时,必须指定纹理坐标。但是,哪个坐标映射到哪个颜色
例如,glTexCoord2f(0,0)
映射到像素[0]、像素[15]
、像素[240]
或像素[255]
中的哪一个?那么glTexCoord2f(1,0)
呢
编辑:纹理矩阵(实际上)假定为单位矩阵。默认情况下(使用单位纹理矩阵),纹理坐标从纹理空间的左下角开始,延伸到右上角,因此它们的布局如下:
(0,1) ... (1,1)
: :
(0,0) ... (1,0)
[240] -> [255]
: :
[0] -> [15]
纹理数据本身是从左下角到右上角逐成分、逐像素、逐行排列的。因此,在你这样的情况下:
(0,1) ... (1,1)
: :
(0,0) ... (1,0)
[240] -> [255]
: :
[0] -> [15]
因此,作为一个结论,您得到了这个映射(忽略任何过滤和钳制问题):
咬紧牙关,升级到GL 1.2,并使用GL\u-CLAMP\u-to\u-EDGE
。