1

纹理是否也需要遵守某些格式限制?

我正在加载 TGA 文件并使用以下片段着色器绘制它们:

varying vec2      v_texCoord;
uniform sampler2D s_texture;
uniform vec4      vColor4;

void main()
{
  vec4 tmpColor = texture2D( s_texture, v_texCoord );

  tmpColor.r = vColor4.r;
  tmpColor.g = vColor4.g;
  tmpColor.b = vColor4.b;

  gl_FragColor = tmpColor;
}

我发现 16x16 图像显示正常。64x16 显示正常。72x16、80x16 和 96x16 不起作用。

如果需要,我将提供更多信息,包括 TGA 文件。

4

1 回答 1

0

72、80 和 96 不是二次方;这个要求与 OpenGL ES 中的数据格式关系不大。即使在现代桌面 GL 中,这一要求实际上也很普遍,它可能取决于所使用的数据格式。

(桌面)OpenGL 2.0 或更高版本中的未压缩纹理数据可以具有非二次方维度。

但是,压缩纹理数据继续需要 4 的倍数的块大小,像素传输函数继续假定图像中每一行的 4 字节数据对齐,浮点纹理(如果支持)也可能需要 2 的幂,等等上。

许多为 GL 设计的图像库实际上会将内容重新缩放为 2 的幂,这可以解决上面讨论的每一个问题。解决维度问题并不总是最合适的方法(它可能非常浪费),但它可以普遍应用于几乎任何常见的维度问题。

于 2016-04-08T02:23:05.847 回答