Android 纹理坐标不一致

Android 纹理坐标不一致,android,unity3d,graphics,opengl-es,Android,Unity3d,Graphics,Opengl Es,为了调试,我尝试在一个统一的四边形上平铺纹理坐标 在桌面上没有问题,但在android(旧平板电脑)上,我看到纹理坐标不一致(下面的图像链接显示结果)。 当我们从0.0,0.0到1.0,1.0时,纹理坐标不断变得不一致。 不一致性随着平铺值的增加而增加,图像中的结果为60160 我的设备的android版本是5.0,GPU支持opengl es 2.0而不是3.0 因此,我想知道为什么这会发生在我的平板电脑上,而不是我的桌面上,我希望了解导致这一情况的gpu中发生了什么 我使用的着色器- Sha

为了调试,我尝试在一个统一的四边形上平铺纹理坐标

在桌面上没有问题,但在android(旧平板电脑)上,我看到纹理坐标不一致(下面的图像链接显示结果)。
当我们从0.0,0.0到1.0,1.0时,纹理坐标不断变得不一致。 不一致性随着平铺值的增加而增加,图像中的结果为60160

我的设备的android版本是5.0,GPU支持opengl es 2.0而不是3.0

因此,我想知道为什么这会发生在我的平板电脑上,而不是我的桌面上,我希望了解导致这一情况的gpu中发生了什么

我使用的着色器-

Shader "Unlit/uvdisplay"
{
    Properties
    {
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = fixed4(frac(i.uv*fixed2(60.0,160.0)),0.0,1.0);
                return col;
            }
            ENDCG
        }
    }
}


并非所有Android设备都支持片段着色器中的highp,一些较旧的设备仅限于mediump

在统一术语中,根据定义,就好像你在片段着色器中要求
float
精度,但是你得到了
half
精度

对此,除了尽量使值靠近原点以最小化错误外,您不能做太多


此外,在一些仅支持半精度的设备上,只要您除了对纹理进行采样之外什么都不做(即,在使用纹理坐标之前不要修改或旋转纹理坐标),驱动程序/GPU就可以使用全精度进行纹理采样。

好,这是硬件限制。感谢您的回答,我将使用多个合理的20*20瓷砖四边形,并将它们放置在适当的位置,以形成大网格。应该这样做。