【问题标题】:opengl es texture not power of two (iphone)opengl es 纹理不是二的幂(iphone)
【发布时间】:2011-05-14 20:45:43
【问题描述】:

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

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

谁能给我一个示例代码的sn-p,好吗? 我一直在努力解决这个问题,但我就是不明白。

顺便说一句,我也尝试不使用 glTexSubImage2D,而是在 0...1 之间调整 TextureCoords,但这并没有奏效。

【问题讨论】:

标签: iphone opengl-es textures


【解决方案1】:

您将不可避免地必须从 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 2011-08-23
    相关资源
    最近更新 更多