shader编程基础:画圆
前记
使用的在线编译工具shadertoy的编写shader语言。跳转链接:Shadertoy
基本实现

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 uv = (fragCoord-0.5*iResolution.xy)/iResolution.y;
    uv *= 2.;
    float d = dot(uv, uv);
    vec3 color = vec3(d);
    fragColor = vec4(color,1.0);
}
- fragCoord:当前像素点
 - iResolution:分辨率
 - uv: fragCoord在当前分辨率的归一化坐标,这里做了移位和缩放
- (fragCoord-0.5iResolution.xy)/iResolution.y 这里 -0.5iResolution.xy往右上各移动半个屏幕, /iResolution.y 图像的宽高以分辨率的的高为基准进行归一化。
 - uv *= 2 对uv进行缩放,考虑假设uv的轴区间是[0, 1],乘2之后映射到[0, 2]了,分辨率不变,像素点向uv方向偏移一半,视觉表现即图像缩小了一半
 
 - float d = dot(uv, uv) 这里是把uv视为向量进行取模
 - fragColor 是这个像素点计算完输出的颜色
 
进阶
绘制圆环,带有发光,边缘看起来更加平滑(可以参考画线和发光呼吸圆环的更优雅的实现)

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 uv = (fragCoord-0.5*iResolution.xy)/ iResolution.y;
    uv *= 2.;
    float thicknessPix = 50.;
    float thickness = thicknessPix / iResolution.y;
    float r = 0.7;
    float fadePix = 20.;
    float fade = fadePix / iResolution.y;
    float d = dot(uv, uv);
    vec3 color = vec3(1. - smoothstep(r + thickness, r + thickness + fade, d));
    color *= vec3(smoothstep(r, r + fade, d));
    fragColor = vec4(color,1.0);
}
- thickness: 圆环厚度
 - fade: 发光(渐变)厚度
 - smoothstep: 生成发光函数(详解见下文)
 - color *= vec3(smoothstep(r, r + fade, d)):大白园叠加里面那个小白圆
 
shader编程常用函数:
- smoothstep
 
float smoothstep(float t1, float t2, float x) {
  x = clamp((x - t1) / (t2 - t1), 0.0, 1.0);
  return x * x * (3 - 2 * x);
}
平滑函数计算一个值在两个边界之间的平滑过渡,通常用来产生渐变效果

(t1 = -2, t2 = 3)

(t1 = 3, t2 = -2)
如图示,函数根据参数t1, t2左右边界,取0,0~1,1,注意,根据t1,t2大小有两类函数图像。
- dot:dot函数计算两个向量的点积,即对应的元素相乘再求和,常用于计算光照,投影,反射等。
-cross: cross函数来计算两个向量的叉乘,它产生一个垂直于这两个向量的向量。常用于计算法向量和切向量。 - length: 用length函数计算一个向量的长度,该向量与原点的欧氏距离。它通常用于归一化向量、距离计算等。
 - normallize: normallize函数是向量归一化,它的长度是1。通常用于计算光照、法向量等
 - clamp: clamp函数将一个值限制在一个范围内,通常用于限制颜色值、坐标值等。
 - mix: mix函数用于线性插值,即计算两个值之间的某个中间值。它通常用于动态地改变颜色、位置等。
 - pow: pow函数将一个数值乘以自身n次方,通常用于计算光照、阴影等。
 
参考连接
shader编程基础:画圆的更多相关文章
- HLSL Shader编程基础总结
		
转自:https://blog.csdn.net/Blues1021/article/details/47093487 基本前提概念 Shader是一种映射到GPU硬件汇编语言上的高级语言,Shade ...
 - 【液晶模块系列基础视频】4.1.X-GUI图形界面库-画线画圆等函数简介
		
[液晶模块系列基础视频]4.1.X-GUI图形界面库-画线画圆等函数简介 ============================== 技术论坛:http://www.eeschool.org 博客地 ...
 - LCD编程_画点线圆
		
上篇博客中进行了lcd的简单测试,这篇博客将进行更加复杂的测试——画点.画线.画圆.画线和画圆是在画点的基础上实现的,因此本篇博客重点实现画点操作. 先抛出这样的一个问题,已知: (x,y)的坐标: ...
 - 1.1.2-学习Opencv与MFC混合编程之---画图工具 画直线 画圆 画矩形
		
源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961685 画图工具 1. 画直线 Ø 增加‘直线’菜单项,建立类向导: Ø 对CXX ...
 - 操作系统实验 windows编程多线程 生产者消费者问题 画圆画方(内置bug版)
		
实验3:随便写的 #include <windows.h> #include <string> #include <stdio.h> #pragma warning ...
 - C#_GDI+详细教程(图形图像编程基础)
		
第7章 C#图形图像编程基础 本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础.C#图像处理基础以及简单的图像处理技术. 7.1 GDI+绘图基础 编写图形程序时需要使用GDI( ...
 - ChatGPT API接口编程基础与使用技巧
		
总结/朱季谦 趁着这周末空闲时间,在研读完OpenAi官网文档的基础上,及时总结了这篇<ChatGPT API接口编程基础与使用技巧>. 本文大部分内容是围绕编程方面,包括ChatGPT模 ...
 - 【浅墨Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 & 第一个Shader的书写
		
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...
 - Unity3d之Shader编程:子着色器、通道与标签的写法 & 纹理混合
		
一.子着色器 Unity中的每一个着色器都包含一个subshader的列表,当Unity需要显示一个网格时,它能发现使用的着色器,并提取第一个能运行在当前用户的显示卡上的子着色器. 我们知道,子着色器 ...
 - 【浅墨Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色、光照与材质
		
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨) ...
 
随机推荐
- APIO2025 一堆题解
			
APIO2025 一堆题解 图论 AtCoder Xmas Contest 2024 A 答案永远是\(1\),6 NWRRC 2015 Graph 考虑不加边,怎么找字典序最小的拓扑序,就维护一个小 ...
 - HDFS目录配额(quota)不足导致写文件失败
			
本文分享自天翼云开发者社区<HDFS目录配额(quota)不足导致写文件失败>,作者:5****m 问题背景与现象 给某目录设置quota后,往目录中写文件失败,出现如下问题"T ...
 - 【译】更优的模型,更智能的设置:Claude Sonnet 4、GPT-4.1 及 Visual Studio 中的更多控制
			
我们很高兴宣布 Visual Studio 中 Copilot 体验的重大升级,包括更智能的默认模型.更多选择以及更简单的用量管理方式. 更智能的默认模型 Visual Studio 中的 Copil ...
 - Cursor 网页版来了,这下拉屎时也能工作了
			
大家好,我是程序员鱼皮.几天前,Cursor 官方宣布推出了网页版 AI 代理,手机上也能用,可以让 AI 帮忙回答问题.编写代码.好家伙,这下我们程序员真的可以随时随地工作了??? 虽然网上吹得天花 ...
 - SQL Server 2008~2022版本序列号/密钥/激活码 汇总
			
SQL Server 2008~2022版本序列号/密钥/激活码 汇总 - 重庆熊猫 - 博客园 (cnblogs.com) SQL Server 2022# Enterprise: J4V48-P8 ...
 - DataGridView绑定BindingList  中的 DataGridViewCheckBoxColumn 无法点击排序问题
			
参考文档 DataGridView绑定BindingList<T>带数据排序的类 - 腾讯云开发者社区-腾讯云 (tencent.com) DataGridView使用技巧十三:点击列头实 ...
 - secp256k1算法详解三(点操作关键理论及源码分析)
			
1 基础概念 1.1 Short Weierstrass Curve 椭圆曲线(Elliptic Curve,EC)是密码学中非常重要的代数结构,在几何上,椭圆曲线是由三次方程描述的一些曲线.不同的公 ...
 - cordova使用http协议打开页面(cordova结合qiankunJs)
			
起因 cordova的webview默认使用file协议打开页面 qiankunJs无法(基于fetch)使用file协议加载子应用 Cookie也无法在file协议下使用 双击页面以file协议打开 ...
 - Gym 102215 & 队内训练#5
			
A - Rooms and Passages 题意:找到每个数后面第一个负正对. 从前往后比较麻烦.从后向前,先记录正数位置,一旦出现这个数的相反数即产生一对负正对,通过和前面的负正对比较更新答案. ...
 - Nacos未授权添加用户
			
路径 /nacos/v1/auth/users?pageNo=1&pageSize=4 POC: POST /nacos/v1/auth/users HTTP/1.1[]() Host: ip ...