0

考虑以下代码,它创建了一个 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)

编辑:纹理矩阵(确实)被假定为单位矩阵。

4

1 回答 1

2

默认情况下(使用单位纹理矩阵)纹理坐标从左下角开始并延伸到纹理空间的右上角,因此它们的布局如下:

(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]
于 2013-07-02T16:40:51.240 回答