opengl es纹理不是两个的力量(iPhone)

时间:2011-05-14 20:45:43

标签: iphone opengl-es textures

我想将尺寸为200px(宽度)x 80px(高度)的纹理绘制成openGL中的矩形(宽200像素,高80像素)。 由于openGL ES 1.1中的纹理必须具有强大的功能,我想加载尺寸为256px x 128px且左上角包含原始200px x 80px图像的图像,其余部分留空。 如何使用glTexSubImage2D从256px x 128px纹理中获取感兴趣的部分? 我不知道如何使用最后一个参数正确地提供该函数,即像素。

此外,我读到我必须以某种方式使用glPixelStorei?

有人可以提供我的示例代码片段吗? 我一直在努力解决这个问题,但我只是不明白。

顺便说一下,我也尝试过不使用glTexSubImage2D,而是将TextureCoords调整到0 ... 1之间,但是这样做并没有效果。

1 个答案:

答案 0 :(得分:2)

您将不可避免地要为纹理坐标选择0 ... 1的子范围。 glTexSubImage2D仅(重新)定义纹理的一部分,同时保留总尺寸。

计算正确的子范围值有点不合适:假设您的总纹理宽度为8像素,像素3 ... 6具有实际内容,则纹理坐标图如下:

        2/8             6/8 
 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 ^                               ^
0.0                             1.0

因此要使用的纹理坐标为:

(t0-1)/ N ...(t1)/ N; t0,t1,N,以像素为单位。

如果要在参数 tau 的0 ... 1范围内处理子纹理,公式为

w:= t1 - t0 u =(t0 - 1)/ N + w * tau