【发布时间】:2016-04-08 01:50:30
【问题描述】:
纹理是否也需要遵守某些格式限制?
我正在加载 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 文件。
【问题讨论】:
-
您使用的是 OpenGL 还是 OpenGL ES?过去对纹理有限制,它们需要在两个维度上都是二次方。但是,在 2.0 版之后,该限制已从 OpenGL 中删除。使用 OpenGL ES 和 WebGL,该限制可能仍然存在(除非您的实现支持移除限制的扩展)。
-
@radical7 我正在使用 OpenGL ES2.0。你说的那是有道理的。那么在 64x16 之后它必须是 128x16 和 256x16 等?
-
只用 2^n 就像 2 4 8 16 32 64 128 256 512 1024.. 很明显。
-
哦。我几乎想说纹理矩形在这里是合适的。过滤位图字体以完成缩放很少会产生有利的结果。您通常需要使用各种不同分辨率的字体进行最近邻采样,这实际上是纹理矩形的完美用例。
-
这应该在 ES 2.0 中得到完全支持,只要 min/mag 过滤器是最近的并且 S 和 T 环绕行为是钳制到边缘(这两者都不是默认纹理状态)。跨度>
标签: opengl-es fragment-shader tga