流光Shader 安卓原生(APK)和浏览器模拟器扫光方向不一致

  • Creator 版本:Creator2.3.2

  • 目标平台: Web / iOS / Android / 模拟器

  • 重现方式:必现

工程链接:https://github.com/ShawnZhang2015/ShaderHelper2
具体shader代码如下:

// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.  

CCEffect %{
  techniques:
  - passes:
    - vert: vs
      frag: fs
      blendState:
        targets:
        - blend: true
      rasterizerState:
        cullMode: none
      properties:
        texture: { value: white }
        color: { value: [10.0,10.0,10.0,1.0] }
        factor: { value: 0.6 }
        width: { value: 0.02 }
}%


CCProgram vs %{
  precision highp float;

  #include <cc-global>
  #include <cc-local>

  in vec3 a_position;
  in vec4 a_color;
  out vec4 v_color;

  #if USE_TEXTURE
  in vec2 a_uv0;
  out vec2 v_uv0;
  #endif

  void main () {
    vec4 pos = vec4(a_position, 1);

    #if CC_USE_MODEL
    pos = cc_matViewProj * cc_matWorld * pos;
    #else
    pos = cc_matViewProj * pos;
    #endif

    #if USE_TEXTURE
    v_uv0 = a_uv0;
    #endif

    v_color = a_color;

    gl_Position = pos;
  }
}%


CCProgram fs %{
  precision highp float;
  
    // 贴图采样器,来自于v2f管线
    uniform sampler2D texture;             
    // 当前点uv
    varying vec2 v_uv0;                

    uniform PROPERTIES{
      vec4  color;
      float factor;  
      float width; 
      float time;
    };

    
    void main()                                      
    {                                          
        vec4 texColor = texture2D(texture, v_uv0);  
    
        float distance = abs(v_uv0[0]+v_uv0[1]-tan(time))/1.414;   
 
        distance = 1.0-(1.0/width)*distance;  
        distance = max(distance, 0.0);  
        vec4 sample = vec4(0.0,0.0,0.0,0.0);  
        sample[0] = color[0] * distance;  
        sample[1] = color[1] * distance;  
        sample[2] = color[2] * distance;  
        sample[3] = distance;  
 
        float alpha = sample[3]*texColor[3];  
        texColor[0] = texColor[0] + sample[0]*alpha*factor;  
        texColor[1] = texColor[1] + sample[1]*alpha*factor;  
        texColor[2] = texColor[2] + sample[2]*alpha*factor;  
        gl_FragColor = texColor;  
    }
}%

在浏览器(手机或PC)和模拟器上,流光的扫光方向是从左上角流动到右下角,角度是45度(/),而在Android 原生 (APK)上角度是135度,从左下角流动到右上角,如下图所示,为什么同样一份代码表现不一样?Android有什么特殊性吗?

应该是屏幕坐标系错乱引起,
估计是同一个问题

疑似特殊机型问题。请给出进一步的设备信息。

进一步的跟进,发现是我的图片放在自动图集目录下,打包后的纹理里面图片是旋转了90度的,把图片移出自动图集,单独存放,就好了

需要在不打包图集的纹理上去除 Packable 选项。