首页 > 其他分享 >shader 案例学习笔记之绘制圆

shader 案例学习笔记之绘制圆

时间:2024-09-11 08:56:19浏览次数:11  
标签:0.2 绘制 float shader 笔记 st xy gl resolution

环境搭建:参考glsl vscode环境搭建

先上代码
#ifdef GL_ES
precision mediump float;
#endif

uniform vec2 u_resolution;

void main(){

  vec2 st = gl_FragCoord.xy/u_resolution.xy;

  st -= 0.5;

  st.x *= u_resolution.x/u_resolution.y;

  float r = length(st);

  float d = step(0.2, r);

  //  float  d = smoothstep(1.0, 0.1, r);

  gl_FragColor = vec4(d, d, d, 1.0); 
}
逐行解释:
  • #ifdef GL_ES
    • 预处理指令,用于检查是否为OpenGL ES 环境;
  • precision mediump float;
    • 如果是OpenGL ES 环境,声明浮点数精度为"mediump"(中等精度)单词为medium  precision缩写。
      • 还有高精度  highp
  • uniform vec2 u_resolution;
    • 定义一个二维向量类型的统一变量"u_resolution",这个变量通常是用来存储屏幕或者渲染区域的分辨率;
  • void mian
    • 片元着色器的入口函数,每个片元都要执行这个函数且所有的着色器代码都要在这个函数中去执行
  • vec2 st gl_FragCoord.xy / u_resolution.xy;
    • gl_FragCoord是片元着色器的内置变量,存储了当前片元的屏幕坐标(以像素为单位)。将其除以u_resolution 得到一个范围在[0,1]之间的二维向量,代表当前片元在屏幕上的相对位置。可以称之为坐标归一化
    • 将main函数代码改成如下,颜色分布和上面分析结果一样
    • void mian(){
      
          vec2 st = gl_FragCoord.xy/u_resolution.xy;
          gl_FragColor = vec4(st.x, st.y, 0, 1.0);
      
      }

  • st -= 0.5
    • 将二维向量每个分量都减去0.5,将坐标中心移动到屏幕中心。
    • 黑色为执行st -= 0.5之前的坐标系,橙色为执行之后的坐标系,从新的坐标系看,原点(0,0)就移动到了渲染区域的中点
  • st.x *= u_resolution.x/u_resolution.y; 
    • 将调整后的横坐标 st.x 乘以屏幕的宽高比(u_resolution.x/u_resolution.y),以确保在不同宽高比的屏幕上图形显示效果一致。
  • float r = length(st);
    • length函数是glsl内置函数。计算向量st的长度并赋值给r。这个向量的长度通常用来表示片元(某个像素点)到中心点的距离。
  •  float c = step(0.2, r);
    • step函数glsl内置函数。如果r的值大于0.2,返回1.0,否则返回0.0。这里的0.2,其实就是我们圆的半径。当改变0.2这位置的参数的大小,就很容易理解,当数值越大时,绘制的圆就越大。
    • 所有的片元(像素)都要执行这个函数,当st到原点(0,0)的距离大于0.2时,就是白色,当小于0.2的时候,就返回黑色,所以最终如下图所示。
  • gl_FragColor = vec4(c, c, c, 1.0);
    • 设置当前片元的颜色
  • 注释掉的方法: float  c = smoothstep(0.3, 0.2, r);
    • glsl内置函数,float smoothstep(float edge0, float edge1, float x);
      •  当edge1 < edge0时,当x < edg1时,返回1,当x > edg0时,返回0,当edg0<=xedg1时,返回x。
      •  当edge0 = edge1 ,smoothstep退化成step
      •  但当edge0=edge1=0,smoothstep(edge0,edge1,x);无论x是什么都返回0
补充:
#ifdef GL_ES
precision mediump float;
#endif

uniform vec2 u_resolution;

void main(){

  vec2 st = gl_FragCoord.xy/u_resolution.xy;

  st -= 0.5;
  st.x *= u_resolution.x/u_resolution.y;

  float r = length(st);

  float color = 0.0;

  if(r>0.2){
    color = 1.0;
  }else{
    color = 0.0;
  }
  gl_FragColor = vec4(color, color, color, 1.0); 
}

标签:0.2,绘制,float,shader,笔记,st,xy,gl,resolution
From: https://blog.csdn.net/weixin_41718879/article/details/142091292

相关文章

  • C#笔记9 对线程Thread的万字解读 小小多线程直接拿下!
    上一条笔记有些潦草,这是因为昨天并没有很好的理解线程可以进行的操作。今天准备细化自己对这方面的理解和记录。来看看细节吧!环境:VS2022系统:windows10环境:.Net8.0以及.NetFrameWork4.7.2(winform)线程是什么?线程是什么?每个操作系统上运行的应用程序都是一个进程,一个......
  • 思源笔记-S3-七牛云-多设备同步
    文档参考:思源笔记配置S3同步、思源笔记使用七牛云编写日期:2024.9.9一、思源笔记安装思源笔记官方下载地址选择对应系统版本进行下载双击【SiYuanInstaller.exe】进行安装二、注册账号注册账号是为了购买订阅,订阅后才提供S3/WEBDAV同步功能打开SiYuan......
  • 代码整洁之道--读书笔记(7)
    代码整洁之道简介:本书是编程大师“Bob大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更高台阶。本......
  • 《计算机算法设计与分析》笔记
    第一章算法概述1.1算法性质:输入、输出、确定性、有限性1.2时间复杂度上界记号O:如果存在正的常数C和自然数N0,使得当N≧N0时有f(N)≦Cg(N),则f(N)有上界函数g(N),记为f(N)=O(g(N))。同阶记号θ:f(N)=θ(g(N))表示f(N)和g(N)同阶。下界记号Ω:如果存在正的常数C和自然数N0......
  • 【05】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-条件渲染+if/switch判断与for/
     序言:本文详细介绍了ArkTs语言中的数组、if单双多分支判断、switch判读、while循环、for循环并给出相应的具体案例和实现代码,附有综合案例京东购物的加购。笔者也是跟着B站黑马的课程一步步学习,学习的过程中添加部分自己的想法整理为笔记分享出来,如有代码错误或笔误,欢迎指正......
  • 【06】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-综合案例·生肖抽奖卡具体实现
    序言:本文综合了前五次笔记的知识内容,完成了相对来说较为复杂的生肖抽奖卡案例,通过拆分和一步步的思路分析完成本案例,通过完成这次案例,笔者可以说是把前面的所有内容或多或少的都有所复习,特此分享给大家。笔者也是跟着B站黑马的课程一步步学习,学习的过程中添加部分自己的想法......
  • Unity碰撞入门笔记
    Collider和Collider碰撞条件layer间可碰撞。其中之一为刚体。碰撞函数进入碰撞:OnCollisionEnter(Collisioninfo)碰撞中:OnCollisionStay(Collisioninfo)碰撞离开:OnCollisionExit(Collisioninfo)trigger物体作为trigger将没有碰撞,作为触发器使用。(例如到达点位刷怪)进......
  • HTML/CSS/JS学习笔记 Day4(HTML--C3 表格)
    跟着该视频学习,记录笔记:【黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程】https://www.bilibili.com/video/BV14J4114768?p=12&vd_source=04ee94ad3f2168d7d5252c857a2bf358Day4 内容梳理:目录HTML3.0表格3.1表格标签(1)语法基本标签......
  • 前端使用 Konva 实现可视化设计器(22)- 绘制图形(矩形、直线、折线)
    本章分享一下如何使用Konva绘制基础图形:矩形、直线、折线,希望大家继续关注和支持哈!请大家动动小手,给我一个免费的Star吧~大家如果发现了Bug,欢迎来提Issue哟~github源码gitee源码示例地址矩形先上效果!实现方式基本和《前端使用Konva实现可视化设计器(21)-绘制......
  • 单片机原理及应用笔记
    单片机原理及应用笔记前言本篇文章是参考《单片机原理及应用(c语言版)第2版》杨居义·编著教材编写的笔记由王兴泽老师指导,马峰、齐詹曦等同学通过完成此篇文章实时更新模块一、单片机概述项目1:单片微型计算机1.单片机内部结构及应用系统(1)单片机内部结构     ......