【发布时间】:2015-07-14 23:29:02
【问题描述】:
我正在玩着色器概念,以使用 OpenGL ES 中的着色器径向显示图像。最终目标是通过在渲染完整圆形进度纹理的片段着色器中丢弃片段来创建圆形进度条。
我已将我的想法编码为here in ShaderToy,以便您可以使用它。我似乎无法让它工作,而且由于无法调试,我很难找出原因。
这是我的片段着色器的 glsl 代码:
float magnitude(vec2 vec)
{
return sqrt((vec.x * vec.x) + (vec.y * vec.y));
}
float angleBetween(vec2 v1, vec2 v2)
{
return acos(dot(v1, v2) / (magnitude(v1) * magnitude(v2)));
}
float getTargetAngle()
{
return clamp(iGlobalTime, 0.0, 360.0);
}
// OpenGL uses upper left as origin by default
bool shouldDrawFragment(vec2 fragCoord)
{
float targetAngle = getTargetAngle();
float centerX = iResolution.x / 2.0;
float centerY = iResolution.y / 2.0;
vec2 center = vec2(centerX, centerY);
vec2 up = vec2(centerX, 0.0) - center;
vec2 v2 = fragCoord - center;
float angleBetween = angleBetween(up, v2);
return (angleBetween >= 0.0) && (angleBetween <= targetAngle);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord.xy / iResolution.xy;
if (shouldDrawFragment(fragCoord)) {
fragColor = texture2D(iChannel0, vec2(uv.x, -uv.y));
} else {
fragColor = texture2D(iChannel1, vec2(uv.x, -uv.y));
}
}
它从两侧从底部扫出。我只是想让它从一个指向上方的向量中扫出,并以顺时针方向移动。
【问题讨论】:
-
看起来不错。是安卓版还是IOS版?任何一个都有调试工具。
-
这不好,所以我的问题在这里。我在着色器玩具上运行代码。平台无关紧要,这是一个通用的着色器问题。
标签: opengl-es opengl-es-2.0 fragment-shader