簡體   English   中英

OpenGL ES紋理圖集失真

[英]OpenGL ES texture atlas distortion

我正在嘗試使用紋理圖集和特定的着色器平鋪區域,但是在不同的設備上卻出現了奇怪的行為。

它們中的大多數(三星Galaxy Ace,三星Galaxy Gio等)都可以,只是出現了出血(希望我可以用半像素校正來修復它)。

但是三星Galaxy S3距離遙遙領先:

截圖

(似乎也從較弱的變形區跳到了甚至更差的變形區,這恰好發生在規則的圖集寬度或高度通過時)

  • 使用OpenGL ES 2.0,Android SDK。
  • 用於平鋪的圖集和紋理部分均為POT(圖集為1024,紋理部分為64)。
  • 紋理過濾無所謂:同時嘗試了NEARESTLINEAR
  • 使用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);
    }

將圖像放置在/assets ,而不是在/res/drawable-nodpi 我將所有內容都放在/assets並且以任何其他方式的PNG縮放,優化或失真都沒有問題。

相關問題: Android應用程序通過縮放從/ drawables-nodpi /加載圖像

但是,您應該檢查位圖的尺寸。 如果以適當的大小加載,則問題不在縮放的位圖中。

另外,我建議您更新着色器-您應該將偏移量傳遞給頂點着色器,然后將最終坐標傳遞給片段着色器。 它們可以正確插值,但是片段着色器中的計算量要少得多(這也可能會影響某些硬件的精度)。

最終,您根本不應該在着色器中進行此類計算-而是在Java代碼中執行此數學運算,而只是將采樣器的最終坐標傳遞到着色器中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM