【发布时间】:2014-02-25 20:01:51
【问题描述】:
我正在尝试使用纹理图集和特定着色器平铺区域,但在不同的设备上出现奇怪的行为。
大部分(Samsung Galaxy Ace、Samsung Galaxy Gio 等) 都还好,只是出现出血(希望我可以通过半像素校正来修复它)。
但是 三星 Galaxy S3 距离第二:
(似乎也出现了从较弱到更严重的失真区域的跳跃,它恰好发生在常规的图集宽度或高度传递上)
- 使用 OpenGL ES 2.0,Android SDK。
- 用于平铺的图集和纹理部分都是 POT(图集为 1024,纹理部分为 64)。
- 纹理过滤无关紧要:尝试了 NEAREST 和 LINEAR
- drawable-nodpi 使用资源文件夹
- mat4, vec2, vec4, sampler2D 精度变化无济于事
我做错了什么?有办法解决吗?
着色器:
顶点:
uniform mat4 u_viewmatrix;
uniform mat4 u_modelmatrix;
attribute vec4 a_position;
varying vec2 v_texCoord;
void main()
{
mat4 matrix = u_viewmatrix * u_modelmatrix;
gl_Position = matrix * a_position;
v_texCoord = a_position.xy;
}
片段:
precision highp float;
uniform sampler2D u_texture;
uniform float u_texpartx;
uniform float u_texparty;
uniform float u_texpartwidth;
uniform float u_texpartheight;
uniform float u_texwidth;
uniform float u_texheight;
varying vec2 v_texCoord;
void main()
{
vec2 coord;
coord.x = (u_texpartx + mod(v_texCoord.x, u_texpartwidth))/u_texwidth;
coord.y = (u_texparty + mod(v_texCoord.y, u_texpartheight))/u_texheight;
gl_FragColor = texture2D(u_texture, coord);
}
【问题讨论】:
标签: java android opengl-es textures opengl-es-2.0