Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity-着色器在Android(OpenGL)和编辑器(DX11)上的工作方式不同_Android_Opengl Es_Unity3d_Directx_Shader - Fatal编程技术网

Unity-着色器在Android(OpenGL)和编辑器(DX11)上的工作方式不同

Unity-着色器在Android(OpenGL)和编辑器(DX11)上的工作方式不同,android,opengl-es,unity3d,directx,shader,Android,Opengl Es,Unity3d,Directx,Shader,我编写了圆形剪切精灵着色器,它在编辑器和独立版本中工作正常,但在Android设备上的行为不正确 本质上,它是一个简单的像素着色器: fixed4 frag(pixelData IN) : SV_Target { const float PI = 3.1415; float angle = -atan2(IN.texcoord.x - 0.5, -IN.texcoord.y + 0.5) + PI; if (angle < _Percent * 2 * PI) //_Percent

我编写了圆形剪切精灵着色器,它在编辑器和独立版本中工作正常,但在Android设备上的行为不正确

本质上,它是一个简单的像素着色器:

fixed4 frag(pixelData IN) : SV_Target
{
 const float PI = 3.1415;
 float angle = -atan2(IN.texcoord.x - 0.5, -IN.texcoord.y + 0.5) + PI;

 if (angle < _Percent * 2 * PI) //_Percent is in range from 0 to 1        
     return tex2D(_MainTex, IN.texcoord) * IN.color;            
 else
     return float4(1,1,1,0);            
}
在DX9 GPU上的编辑器DX11中渲染

Android OpenGL的屏幕截图-Nexus 4

正如你在中间可以看到的那样,像素应该是红色


我使用的是Unity 5.0.0f4。附加压缩测试项目:30kB

在atan2中,当y参数从上面的eg-In.texcoord.x-0.5~=+0接近零时,您将开始获得接近PI的值,因为您将获得arctany/x+PI,其中y~=0,arctan0=0。Android版本大概使用的是较低精度的浮点运算,因此这一点在那里更为明显。如果你在桌面版本上放大的足够多,你可能会看到像素也不符合你的条件。

更新到Unity的新版本后,问题自行解决。

根据wiki上的说法,atan2只有在x==0和y==0时才是未定义的,所以这不是案例更新后的答案。。。答案的本质是正确的,但案例并不完全正确。在atan2中,当y参数从上方接近零时,例如-In.texcoord.y+0.5~=+0,您能否澄清您指的是哪个参数?atan2被定义为atan2y,x,但您与-IN.texcoord.y+0.5相关,我将其用于x第二个参数。再次更新答案以更正参数值。。。同样的论点成立。atan2的第一个y参数不是0或接近我放置黄点的位置,但它仍然渲染不正确。