我想将尺寸为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之间,但是这样做并没有效果。答案 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