shader 案例学习笔记之smoothstep函数

news2024/11/11 10:54:16
参考:smoothstep

用来生成0-1的平滑过渡值

smoothstep函数源码实现: 

float smoothstep(float t1, float t2, float x) {
  // Scale, bias and saturate x to 0..1 range
  x = clamp((x - t1) / (t2 - t1), 0.0, 1.0); 
  // Evaluate polynomial
  return x * x * (3 - 2 * x);
}

先理解clamp函数:

用于将一个值限制在给定的范围之内。其语法为clamp(x, minVal, maxVal),它接受三个参数:

  • x:要被限制的值。
  • minVal:范围的最小值。
  • maxVal:范围的最大值。
#ifdef GL_ES
precision mediump float;
#endif

uniform vec2 u_resolution;
uniform float u_time;

void main(){


  vec2 st = gl_FragCoord.xy/u_resolution.xy;
  st.x *= u_resolution.x/u_resolution.y;

  float maxValue = abs(sin(u_time)) * 0.5;

  float f = clamp(st.y, 0.0, maxValue);

  gl_FragColor = vec4(f,f,f, 1.0); 
}
  •  float maxValue = abs(sin(u_time));
    • sin(u_time)返回[-1,1]的值,abs(sin(u_time)) 取绝对值将该值限制在了[0,1],再乘以0.5返回[0,0.5]
  • float f = clamp(st.y, 0.0, maxValue);

    • maxValue的区间为[0,0.5]

    • clamp(st.y, 0.0, maxValue)将屏幕的Y值限制在[0,0.5]之间

x = clamp((x - t1) / (t2 - t1), 0.0, 1.0);

  • x的值被限制在0-1之间。
绘制圆环:
#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 r1 = smoothstep(0.2,0.3 ,r );
  float r2 = smoothstep(0.3,0.4 ,r );
  float color = r1- r2;

  gl_FragColor = vec4(vec3(color),1.0);
}

r1-r2的函数图像 

绘制结果 

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

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

相关文章

@rem和rem用法和区别

在Windows的命令提示符(cmd)中,rem和rem都是用来注释批处理脚本的。 用法: rem:在一行的开头使用,注释只对当前行有效。rem:也在一行的开头使用,注释会一直持续到下一行。 区别&a…

基于SpringBoot的在线汽车租赁信息管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的在线汽车租赁信息…

STM32 HAL freertos零基础(五) STM32CubeMX配置完成后自定义二值信号量 解决二值信号量初始值为1问题

1、简介 通过上文虽然实现了二值信号量实战,但每次配置STM32CubeMX二值信号量都恢复默认值1,为了解决该问题,对于二值信号量通过CubeMX配置完成后,在程序内自定义二值信号量。 2、文件建立 建立BinarySem文件夹添加BinarySem.c…

Selenium自动化测试网页加载太慢如何解决(超详细)

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 遇到网页加载慢,selenium运行效率降低,可以通过修改页面加载策略提升自动化效率。 selenium加载很慢 通过URL导航到新页面时,…

利用平板电脑和谷歌浏览器进行在线教育学习

在数字化时代,教育的形式越来越多样化,特别是在线教育的兴起为学习带来了前所未有的便利。对于经常在平板电脑上进行学习的用户来说,谷歌浏览器提供了强大的功能,帮助用户更有效地学习。本文将指导您如何在使用平板电脑和谷歌浏览…

系统工程建模MBSE

################################# ############# 片段一 ############## ################################# 下图采用“V”模式显示了集成的基于模型的系统/嵌入式软件开发流程Harmony。左侧描述了自顶向下的设计流程,而右侧显示了自底而上的从单元测试到最终系统验收测试…

‌语音控制小夜灯的实现方案介绍

‌语音控制小夜灯的实现方案组成部分‌ 语音控制小夜灯的实现方案主要包括硬件组装和软件编程两个部分。‌ ‌硬件组装‌涉及将语音声控模块、灯泡、USB连接线等组件正确连接。首先,使用螺丝刀和螺丝将四个隔离柱固定在底板四个拐角处,同时将语音声控模…

Linux CentOS更换阿里云源解决Could not retrieve mirrorlist http://mirrorlist.centos.org

Linux CentOS7 更新yum 操作的时候出现这个问题: Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org 然后我执行 grep -nr "mirrorlist.centos.org" /etc/yum.repos.d/* 出现 这个问题时可以…

2023下半年软考网络规划

【考情分析】2023下半年软考网络规划设计师机考考情分析-真题解析公开课视频!_哔哩哔哩_bilibili2023年11月软考网络规划设计师案例分析解析与考后复盘_哔哩哔哩_bilibili全网首发!2023年下半年软考【高级】网规真题试卷--案例分析(部分回忆版…

如何优化谷歌排名更有效?

要想提高排名,首先得从用户的角度出发。要想他们在搜索时最关心什么问题,急需解决哪些痛点,之后要做的就是创建GHA高质量内容,创建内容时尽量深入探讨这些问题,而不是泛泛而谈。内容要自然,尽量避免过多的关…

北京等你!网易云信参加第五届中国银行数智峰会

随着数字中国建设的持续深入,以及大数据、云计算、AI、融合通信等技术在银行业务场景中的应用,银行业正在经历新一轮的数智化转型与革新。 数字化转型不仅是技术层面的升级,更是业务模式和运营方式的全面革新。比如智能虚拟客服、数字银行等的…

软件测试学习笔记丨Postman实战练习

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32096#h-22 二、实战练习 2.1 宠物商店接口文档分析 接口文档:http://petstore.swagger.io ,这是宠物商店接口的 swagger 文档。 2.1.1 什么是 swagger Swagger 是…

更改flutter 应用的应用名称和图标

在 Flutter 项目中,更改构建后的应用名称和图标是常见的定制化需求。以下是如何更改应用名称和图标的步骤。 1. 更改应用名称 Android 平台 修改 Android 端的应用名称: Flutter 项目的 Android 部分位于 android/app/src/main/AndroidManifest.xml …

高度可定制的电竞鼠标,雷柏VT1 PRO MAX体验

不管是菜鸟还是老鸟,游戏玩到某个阶段很容易出现瓶颈,在游戏的某个阶段,这里面制约最大的除了操作之外,实际上还是我们用的硬件。比如在PC游戏中,鼠标的影响就非常大,像是在游戏中如果鼠标延迟过高&#xf…

每天五分钟玩转深度学习框架PyTorch:获取神经网络模型的参数

本文重点 当我们定义好神经网络之后,这个网络是由多个网络层构成的,每层都有参数,我们如何才能获取到这些参数呢?我们将再下面介绍几个方法来获取神经网络的模型参数,此文我们是为了学习第6步(优化器)。 获取所有参数Parameters from torch import nn net=nn.Sequent…

责任链模式chain of responsibility

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/chain-of-responsibility 将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者 把责任链造出来然后往后传

SQL的高级查询练习知识点中(day25)

1 学习目标 重点掌握聚合函数的使用重点掌握字段别名重点掌握分组查询的语法重点掌握having的使用方法了解子查询的语法重点掌握排序查询语法 2 排序查询 2.1 语法 SELECT要查询的东西 FROM表 WHERE 条件 ORDER BY 排序的字段|表达式|函数|别名 [ASC|DESC] ASC 升序&#…

Mendix 10.14 版 – 新版本上线及新功能点介绍

Mendix 10.14版本的全部内容都是“连接点”——从简化Studio Pro中的编辑体验到用于连接到其他系统的强大更新。 Studio Pro已针对性能进行了优化,用户现在可以直接在属性窗格中更改样式。现在也可以在系统文本编辑器中使用Maia(AI)进行翻译…

Java中的类加载与卸载机制详解

在Java虚拟机(JVM)中,类加载和类卸载机制是Java运行时环境的重要组成部分。理解类的加载与卸载不仅有助于深入掌握JVM的运行原理,还可以帮助开发者优化程序性能,特别是在内存管理和应用程序生命周期管理中起到关键作用…

通信过程天线的原理

文章目录 电场电场的作用 磁场电磁波电磁波怎么表示0与1 引用文章 电场 电场是电荷及变化磁场周围空间里存在的一种特殊物质。 静止电荷在其周围空间产生的电场,称为静电场; 电场的作用 电荷产生电场:任何电荷周围都存在电场。正电荷产生的…