第 39 课:Time
别人的解:sin 的值域-1.0 到1.0,除2是0.5-0.5, 加0.5是0-1。
别人的解
uniform vec2 iResolution;
uniform float iTime;
uniform sampler2D iChannel0;
void main() {
vec2 uv = gl_FragCoord.xy / iResolution.xy;
float t = sin(iTime * 2.0) * 0.5 + 0.5;
float delta = 0.375 * t * step(0.3, uv.y);
vec4 color = texture(iChannel0, uv);
gl_FragColor = color;
}
复盘笔记
- sin 的值域-1.0 到1.0,除2是0.5-0.5, 加0.5是0-1。
- 0.375的值是这么来的:题目说0.675的位置是上颚,低点则是0.3, 所以要平移0.375,即0到0.375
- 之所以是加不是减,因为uv是屏幕采样坐标,采样的位置越是向上加,图像越是向下
- 问题是,为什么往上加,背景是白的而不是别的什么?
- 因为你的贴图(
iChannel0)在超出[0.0, 1.0]范围时,其采样模式(wrap mode)是CLAMP_TO_EDGE,而 GPU 默认对超出边界部分返回白色或未定义值——这跟你使用的平台、设置、甚至 ShaderToy 或 Unity 有关。