【Shader】画线

https://thebookofshaders.com/ 上学习 shader,记个笔记。

在最左边画一条线

#ifdef GL_ES
precision mediump float;
#endif

uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;

void main() {
    vec2 st = gl_FragCoord.xy/u_resolution.xy;
    float borad = 0.02;
    float left_line = step(borad, st.x);
    vec3 color = vec3(left_line);
    gl_FragColor = vec4(color,1.0);
}

左边的线

这里最重要的就是step函数(详情)。
在我的例子里,所有小于 0.02 的 x 都返回 0 ,效果就是一条 0.02 宽的黑线。


那如果要画一条最下面的线,那么只需要把float left_line = step(borad, st.x); 里的st.x改成st.y即可。

下面的线


如果我要同时画左边下面的。那就需要这样

void main() {
    ...
    float left_line = step(borad, st.x);
    float bottom_line = step(borad, st.y);
    float lb = left_line * bottom_line;
    vec3 color = vec3(lb);
    ...
}

把结果相乘。


左下的线

为什么乘一下就可以得到两条线?

在我的例子里,step的结果,如果小于 0.02 ,那么就是 0 ,否则是 1 。

  • 符合left_line,符合bottom_line,结果是 0 * 0 = 0
  • 符合left_line,不符合bottom_line,结果是 0 * 1 = 0
  • 不符合left_line,符合bottom_line,结果是 1 * 0 = 0

上面这些结果相乘都为 0 。用在颜色里就是黑色。

  • 不符合left_line,不符合bottom_line,结果是 1 * 1 = 1

上面的结果是白色。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文章作者:Tyan博客:noahsnail.com | CSDN | 简书 声明:作者翻译论文仅为学习,如有侵权请...
    SnailTyan阅读 7,404评论 0 5
  • 我的图书馆 留言交流 2000个最常用的英语单词 2016-05-15酴羰骀璺 2000个最常用的英语单词 (英语...
    Mr_Wang92阅读 3,994评论 0 0
  • 早期在读研的时候,就在找把PDF扫描文件清晰化,有些扫描书籍出来的PDF,又是歪的,又是糊的,看起来非常费劲,网上...
    girlfull阅读 11,719评论 1 1
  • 以下文章是我在网上收集的内容,为了记录自己的学习以及为了以后不到处找而记录下来,如果对你有用,请感谢写这些文章的前...
    DCbryant阅读 4,470评论 0 2
  • 1. box-sizing box-sizing属性主要用来控制元素的盒模型的解析模式。默认值是content-b...
    下下下个路口左转阅读 1,183评论 0 0