前记

使用的在线编译工具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编程基础:画圆的更多相关文章

  1. HLSL Shader编程基础总结

    转自:https://blog.csdn.net/Blues1021/article/details/47093487 基本前提概念 Shader是一种映射到GPU硬件汇编语言上的高级语言,Shade ...

  2. 【液晶模块系列基础视频】4.1.X-GUI图形界面库-画线画圆等函数简介

    [液晶模块系列基础视频]4.1.X-GUI图形界面库-画线画圆等函数简介 ============================== 技术论坛:http://www.eeschool.org 博客地 ...

  3. LCD编程_画点线圆

    上篇博客中进行了lcd的简单测试,这篇博客将进行更加复杂的测试——画点.画线.画圆.画线和画圆是在画点的基础上实现的,因此本篇博客重点实现画点操作. 先抛出这样的一个问题,已知: (x,y)的坐标: ...

  4. 1.1.2-学习Opencv与MFC混合编程之---画图工具 画直线 画圆 画矩形

    源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961685 画图工具 1.     画直线 Ø  增加‘直线’菜单项,建立类向导: Ø  对CXX ...

  5. 操作系统实验 windows编程多线程 生产者消费者问题 画圆画方(内置bug版)

    实验3:随便写的 #include <windows.h> #include <string> #include <stdio.h> #pragma warning ...

  6. C#_GDI+详细教程(图形图像编程基础)

    第7章  C#图形图像编程基础 本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础.C#图像处理基础以及简单的图像处理技术. 7.1  GDI+绘图基础 编写图形程序时需要使用GDI( ...

  7. ChatGPT API接口编程基础与使用技巧

    总结/朱季谦 趁着这周末空闲时间,在研读完OpenAi官网文档的基础上,及时总结了这篇<ChatGPT API接口编程基础与使用技巧>. 本文大部分内容是围绕编程方面,包括ChatGPT模 ...

  8. 【浅墨Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 & 第一个Shader的书写

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨)  ...

  9. Unity3d之Shader编程:子着色器、通道与标签的写法 & 纹理混合

    一.子着色器 Unity中的每一个着色器都包含一个subshader的列表,当Unity需要显示一个网格时,它能发现使用的着色器,并提取第一个能运行在当前用户的显示卡上的子着色器. 我们知道,子着色器 ...

  10. 【浅墨Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&amp;颜色、光照与材质

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨)  ...

随机推荐

  1. APIO2025 一堆题解

    APIO2025 一堆题解 图论 AtCoder Xmas Contest 2024 A 答案永远是\(1\),6 NWRRC 2015 Graph 考虑不加边,怎么找字典序最小的拓扑序,就维护一个小 ...

  2. HDFS目录配额(quota)不足导致写文件失败

    本文分享自天翼云开发者社区<HDFS目录配额(quota)不足导致写文件失败>,作者:5****m 问题背景与现象 给某目录设置quota后,往目录中写文件失败,出现如下问题"T ...

  3. 【译】更优的模型,更智能的设置:Claude Sonnet 4、GPT-4.1 及 Visual Studio 中的更多控制

    我们很高兴宣布 Visual Studio 中 Copilot 体验的重大升级,包括更智能的默认模型.更多选择以及更简单的用量管理方式. 更智能的默认模型 Visual Studio 中的 Copil ...

  4. Cursor 网页版来了,这下拉屎时也能工作了

    大家好,我是程序员鱼皮.几天前,Cursor 官方宣布推出了网页版 AI 代理,手机上也能用,可以让 AI 帮忙回答问题.编写代码.好家伙,这下我们程序员真的可以随时随地工作了??? 虽然网上吹得天花 ...

  5. SQL Server 2008~2022版本序列号/密钥/激活码 汇总

    SQL Server 2008~2022版本序列号/密钥/激活码 汇总 - 重庆熊猫 - 博客园 (cnblogs.com) SQL Server 2022# Enterprise: J4V48-P8 ...

  6. DataGridView绑定BindingList 中的 DataGridViewCheckBoxColumn 无法点击排序问题

    参考文档 DataGridView绑定BindingList<T>带数据排序的类 - 腾讯云开发者社区-腾讯云 (tencent.com) DataGridView使用技巧十三:点击列头实 ...

  7. secp256k1算法详解三(点操作关键理论及源码分析)

    1 基础概念 1.1 Short Weierstrass Curve 椭圆曲线(Elliptic Curve,EC)是密码学中非常重要的代数结构,在几何上,椭圆曲线是由三次方程描述的一些曲线.不同的公 ...

  8. cordova使用http协议打开页面(cordova结合qiankunJs)

    起因 cordova的webview默认使用file协议打开页面 qiankunJs无法(基于fetch)使用file协议加载子应用 Cookie也无法在file协议下使用 双击页面以file协议打开 ...

  9. Gym 102215 & 队内训练#5

    A - Rooms and Passages 题意:找到每个数后面第一个负正对. 从前往后比较麻烦.从后向前,先记录正数位置,一旦出现这个数的相反数即产生一对负正对,通过和前面的负正对比较更新答案. ...

  10. Nacos未授权添加用户

    路径 /nacos/v1/auth/users?pageNo=1&pageSize=4 POC: POST /nacos/v1/auth/users HTTP/1.1[]() Host: ip ...