shader 案例学习笔记之绘制圆

news2024/9/25 7:14:03

环境搭建:参考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); 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2121527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试分享】面试题——网络题目_网络面试题

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 一、题目 1、网关、网桥、路由器、中继器作用、实现以及对应的osi层? 2、MAC地址是什么? 3、webSocket是什么? 4、常见的协议有哪些&#xff1f; 5、什么…

交换机vlan配置实现

交换机配置 1. 配置交换机速度 进入交换机相应端口。 speed数值&#xff1a; 单位为Mbits;可选10&#xff0c;100&#xff0c;auto duplex参数&#xff1a;参数可选full全双工,half半双工,auto自适应 配置交换机管理IP地址&#xff1a; 在全局模式下&#xff1a; interf…

Qt使用UDP进行单波通信

Qt使用UDP进行单波通信 我们一般学习完基础的一些编程之后就会开始接触网络编程&#xff0c;我们熟悉的网络编程一般会涉及到两个协议一个时TCP&#xff0c;一个是UDP。TCP一般是point to point&#xff0c;UDP一般有单播和广播两种方式&#xff0c;那么我们今天就来学习一下单…

ECRS软件作业分析:提升工厂生产效率的钥匙

在竞争日益激烈的现代工业环境中&#xff0c;如何提升生产效率、降低资源消耗、增加产品价值&#xff0c;成为了每一家制造企业必须面对的重要课题。作业分析&#xff0c;作为一种科学的管理工具&#xff0c;正逐步成为企业优化生产流程、提升竞争力的关键手段。本文旨在深入探…

Unity SRP 可编程渲染管线的基本用法

可编程渲染管线使用教程 SRP 可以处理Canvas为Screen Space - Overlay的渲染 安装插件 首先进入package manager&#xff0c;下载Core RP Lib组件 创建渲染管线 编写渲染管线逻辑脚本 新建脚本取名为MPipeLine&#xff0c;该脚本用于实现渲染管线的处理逻辑 using Unity…

Python计算机视觉 第7章-图像搜索

Python计算机视觉 第7章-图像搜索 7.1 基于内容的图像检索 在大型图像数据库上&#xff0c;CBIR&#xff08;Content-Based Image Retrieval&#xff0c;基于内容的图像检索&#xff09;技术用于检索在视觉上具相似性的图像。这样返回的图像可以是颜色相似、纹理相似、图像中…

优秀一点点

在职场中&#xff0c;想要获得晋升&#xff0c;重要的是比其他同事优秀一点点。这就好比百米短跑比赛&#xff0c;第一名比第二名可能之快了0.01秒&#xff0c;这个0.01秒&#xff0c;和跑一百米所花的10秒钟比起来&#xff0c;可能只有千分之一。也就是说&#xff0c;第一名比…

麦汁煮沸工艺

麦汁煮沸是啤酒酿造中至关重要的工艺环节之一&#xff0c;直接影响啤酒的风味。今天&#xff0c;天泰邀您一起深入探讨这一关键的酿造技术。 煮沸麦汁 在煮沸麦汁时&#xff0c;时间和温度控制至关重要。通常&#xff0c;麦汁煮沸持续 40 到 50 分钟&#xff0c;具体时间取决于…

OpenAI Embeddings API: How embeddings work?

题意&#xff1a;OpenAI 嵌入 API&#xff1a;嵌入是如何工作的&#xff1f; 问题背景&#xff1a; There are quite a few tutorials on embeddings in OpenAI. I cant understand how they work. 在OpenAI中有很多关于嵌入的教程&#xff0c;但我无法理解它们是如何工作的。…

轻松实现游戏串流,内网穿透

一、部署Gemini Gemini使用教程 二、部署Moonlight 过程大概说一下&#xff0c;网上有太多太多moonlight的东西了 需要运行游戏的机器上安装GFE&#xff08;GeForce Experience&#xff09;&#xff0c;登录并开启GAMESTREAM&#xff08;游戏串流&#xff09;功能 注&…

什么是 Flash Attention

Flash Attention 是 由 Tri Dao 和 Dan Fu 等人在2022年的论文 FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness 中 提出的&#xff0c; 论文可以从 https://arxiv.org/abs/2205.14135 页面下载&#xff0c;点击 View PDF 就可以下载。 下面我…

Php数组函数中的那些什么sort排序函数是不是很乱? 可以这样看。以及php搜索给定的值在数组中最后一次出现的位置的实现思考

一、Php数组函数中的那些什么sort排序函数是不是很乱? 可以这样看 PHP的数组函数真不少&#xff0c;甚至对一个程序员来说&#xff0c;在其整个程序生涯中有些方法他永远也不会用上。不过每一个方法都有其价值、或者在出现的时候有其价值。所以偶尔有空时还是可以去看看。在这…

并发编程:线程池(下)

一、线程池常用的阻塞队列有哪些&#xff1f; 新任务来的时候会先判断当前运行的线程数量是否达到核心线程数&#xff0c;如果达到的话&#xff0c;新任务就会被存放在队列中。 不同的线程池会选用不同的阻塞队列&#xff0c;我们可以结合内置线程池来分析。 容量为 Integer…

UE5 半透明阴影 快速解决方案

Step 1&#xff1a; 打开该选项 Step 2&#xff1a; 将半透明材质给到模型后&#xff0c;设置光照的Shadow Resolution Scale&#xff0c;越大&#xff0c;阴影的效果越好 Step 3&#xff1a; 用这种方式去做&#xff0c;阴影会因为半透明的程度&#xff0c;降低阴影的浓度 要…

Spring security 动态权限管理(基于数据库)

一、简介 如果对该篇文章不了解&#xff0c;请移步上一篇文章&#xff1a;spring security 中的授权使用-CSDN博客 当我们配置的 URL 拦截规则请求 URL 所需要的权限都是通过代码来配置的&#xff0c;这样就比较死板&#xff0c;如果想要调整访问某一个 URL 所需要的权限&…

【专项刷题】— 队列

1、N 叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 每次遍历一层节点的时候就把当前节点的值添加到列表中再将当前层的节点的子节点添加到队列中每次遍历完一层之后就添加到总表中代码&#xff1a; public List<List<Integer>> levelO…

如何远程实时监控员工的电脑屏幕?远程桌面监控的五个可实现方法分享

想象一下&#xff0c;你在办公室喝着咖啡&#xff0c;员工的电脑屏幕却在数百公里之外实时呈现在你的眼前。你可以看到他们在干什么&#xff0c;是埋头工作还是悄悄摸鱼&#xff1f;远程桌面监控让这一切变得触手可及&#xff0c;简直像给了管理者一双“千里眼”&#xff01; 如…

RedisTemplate操作String的API

文章目录 1 String 介绍2 命令3 对应 RedisTemplate API❄️❄️ 3.1 添加缓存❄️❄️ 3.2 设置过期时间(单独设置)❄️❄️ 3.3 获取缓存值❄️❄️ 3.4 删除key❄️❄️ 3.5 顺序递增❄️❄️ 3.6 顺序递减 ⛄4 以下是一些常用的API⛄5 应用场景 1 String 介绍 String 类型…

9.10-AutoAWQ代码解析

1、首先要去官网下载源码。https://github.com/casper-hansen/AutoAWQ.githttps://github.com/casper-hansen/AutoAWQ.git 2、git clone后&#xff0c;下载AutoAWQ所需环境。 pip install -e . 3、查看quantize.py代码&#xff0c;修改model_path部分&#xff0c;修改为想要量…

系统架构师考试学习笔记第四篇——架构设计实践知识(19)嵌入式系统架构设计理论与实践

本章考点&#xff1a; 第19课时主要学习嵌入式系统架构设计的理论和工作中的实践。根据新版考试大纲&#xff0c;本课时知识点会涉及案例分析题&#xff08;25分&#xff09;。在历年考试中&#xff0c;案例题对该部分内容都有固定考查&#xff0c;综合知识选择题目中有固定分值…