我正在尝试制作一个球体,为颜色着色,但以yz原点为中心的圆除外,我想对其进行扩张和收缩(已经有一个基于运行时间的时间变量,该时间变量在5s处重复,以为我会只需使用它和一个sin函数即可。)但是我不知道如何实现控件来更改球体上圆内的颜色。
这是我的片段着色器中的主要功能:
vec3 myColor = vec3( 0, 1., 0. );
float uSize = 0.2;
if( vST.t > .4 && vST.t < .6 && vST.s > .4 && vST.s < .6)
{
myColor = vec3( 1., 0., 0. );
}
gl_FragColor = vec4( myColor, 1. );
现在它只是一个绿色的球体,除了s / t 0.4-> 0.6之间的红色框。 vST是顶点s / t坐标。
答案 0 :(得分:1)
将if( ... )
替换为if(distance(vST, center)<radius)
。
更好的是,使其抗锯齿,并将if
替换为mix
。像这样:
float dist = distance(uv, center);
float aa = fwidth(dist);
float inside = smoothstep(radius - aa, radius + aa, dist);
myColor = mix(color0, color1, inside);