[英]OpenGL ES texture atlas distortion
我正在嘗試使用紋理圖集和特定的着色器平鋪區域,但是在不同的設備上卻出現了奇怪的行為。
它們中的大多數(三星Galaxy Ace,三星Galaxy Gio等)都可以,只是出現了出血(希望我可以用半像素校正來修復它)。
但是三星Galaxy S3距離遙遙領先:
(似乎也從較弱的變形區跳到了甚至更差的變形區,這恰好發生在規則的圖集寬度或高度通過時)
我究竟做錯了什么? 有可能修復它嗎?
着色器:
頂點:
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);
}
將圖像放置在/assets
,而不是在/res/drawable-nodpi
。 我將所有內容都放在/assets
並且以任何其他方式的PNG縮放,優化或失真都沒有問題。
相關問題: Android應用程序通過縮放從/ drawables-nodpi /加載圖像
但是,您應該檢查位圖的尺寸。 如果以適當的大小加載,則問題不在縮放的位圖中。
另外,我建議您更新着色器-您應該將偏移量傳遞給頂點着色器,然后將最終坐標傳遞給片段着色器。 它們可以正確插值,但是片段着色器中的計算量要少得多(這也可能會影響某些硬件的精度)。
最終,您根本不應該在着色器中進行此類計算-而是在Java代碼中執行此數學運算,而只是將采樣器的最終坐標傳遞到着色器中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.