OpenGL简单片段和顶点着色器

时间:2019-11-15 20:57:23

标签: opengl glsl

我正在尝试制作一个球体,为颜色着色,但以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坐标。

1 个答案:

答案 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);

演示在https://www.shadertoy.com/view/tsGXWh