gpt4 book ai didi

android - 着色器在平板电脑上产生错误的结果

转载 作者:行者123 更新时间:2023-11-30 03:43:28 25 4
gpt4 key购买 nike

我只使用着色器几天,并编写了一个简单的边缘检测着色器,它添加了阴影和内部阴影。它在我的 galaxy s2 和 iphone 4 上效果很好,但 galaxy tab 和 ipad2 在边缘的两侧只产生了一个非常薄且看起来很粗糙的阴影。我花了几个小时试图找出原因但没有快乐,请帮忙!如果我在模拟器中模拟一个ipad2分辨率,效果是正确的。

着色器在所有设备上使用相同大小的屏幕外缓冲区(640x480 像素)。

vertex shader:
{
attribute highp vec4 inVert; //vertex stream
uniform highp mat4 inPMVMat; //transform to projected space
attribute mediump vec2 inUV0;
attribute lowp vec4 inCol;
uniform mediump vec2 inUVOffset;
uniform mediump vec2 inUVScale;
varying mediump vec2 vTexCoord;
varying mediump float FragColor;
void main(void)
{
gl_Position = inPMVMat * inVert;//set vertex position in projected space
vTexCoord = inUV0*inUVScale;// + inUVOffset;//pass texture to fragment shader
FragColor = inCol.a;
}
}


fragment shader:
{
uniform sampler2D myTexture;
varying mediump vec2 vTexCoord;
varying mediump float FragColor;
lowp float MaxDistance, Distance;
lowp float Shift;
void main(void)
{
gl_FragColor = texture2D(myTexture, vTexCoord);
mediump vec2 PixelSize = vec2(1.0 / 640.0, 1.0 / 480.0);
mediump vec2 Direction = vec2(PixelSize.x*0.5,PixelSize.y*0.5);

if(gl_FragColor.a >= 0.5)
{
//inner shadow
MaxDistance = 15.0;
} else {
//drop shadow
MaxDistance = 12.0;
Direction = -Direction;
}


mediump vec2 Position = vTexCoord;
mediump float c;
for(Distance = MaxDistance; Distance > 0.0;Distance -= 1.0)
{
Position += Direction;
c = texture2D(myTexture,Position).a;
if(c < 0.5)
{
if(gl_FragColor.a >= 0.5)
{
//found transparent edge - do inner shadow
Shift = 1.0-((0.5/MaxDistance)*Distance);
gl_FragColor.r *= Shift;
gl_FragColor.g *= Shift;
gl_FragColor.b *= Shift;
break;
}
} else {
if(gl_FragColor.a < 0.5)
{
//found opaque edge - do dropshadow
gl_FragColor.a = ((0.8/MaxDistance)*Distance);
break;
}
}
}
gl_FragColor.a *= FragColor;
}
}

图片:

gs2

tab

最佳答案

经过大量试验,我最终找到了解决方案。lowp MaxDistance、Distance 和 Shift 变量是罪魁祸首——在更改为 mediump 后,它在所有设备上都能正常工作。我想设备之间的精度存在一些差异

关于android - 着色器在平板电脑上产生错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15393232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com