考虑下面的一段代码,它创建一个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);
使用此纹理渲染三角形时,必须指定纹理坐标。但是,哪个坐标映射到哪个颜色?
例如,pixels[0]
,pixels[15]
,pixels[240]
或pixels[255]
执行glTexCoord2f(0,0)
映射到哪个?那么glTexCoord2f(1,0)
呢?
编辑:纹理矩阵(确实)被假定为单位矩阵。
答案 0 :(得分:1)
默认情况下(使用标识纹理矩阵)纹理坐标从左下角开始并延伸到纹理空间的右上角,因此它们的布局如下:
(0,1) ... (1,1)
: :
(0,0) ... (1,0)
纹理数据本身是在组件之后,逐像素,逐行,从左下到右上的布局组件。因此在你的情况下像这样:
[240] -> [255]
: :
[0] -> [15]
因此,作为结论,您将获得此映射(忽略任何过滤和钳位问题):
(0,0) -> pixels[0]
(1,0) -> pixels[15]
(0,1) -> pixels[240]
(1,1) -> pixels[255]