Shader 用到的数学函数总结及用法

news2024/11/23 15:24:56

在写shader相关的程序的时候往往需要用到 OpenGL内置的数学库,下面列举几个常用的函数用法和效果,下面的所有代码都是运行在shadertoy在线工具上的,推荐一个好用的数学工具desmosDesmos

目录:

  1. abs(x)
  2. step(edge,x)
  3. dot(uv1,uv2)

1:abs(x) 取绝对值

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    // Normalized pixel coordinates (from 0 to 1)
    vec2 uv = fragCoord/iResolution.xy;
    uv -= 0.5;
    
    uv.x *= iResolution.x / iResolution.y;
    
    
    vec3 col = vec3(0.);
    uv = abs(uv);
    
    float c = uv.x;
    
    // 0.2 <= c => 0 0.2 > c => 1 step(.2,c) reverse color
    col += step(c,.2);
    
    

    // Output to screen
    fragColor = vec4(col,1.0);
}

一般abs操作的时候会对uv坐标取绝对值,一般应用于对称的图形绘制上。

2:step(edge,x) 取0或者1: 函数通常用于比较输入值与阈值,并返回一个阶跃函数的结果。阶跃函数的意思是,如果输入值小于或等于阈值,则返回0;如果输入值大于阈值,则返回1。

col += c;
    
    // 0.2 <= c => 0 0.2 > c => 1 step(.2,c) reverse color
    col += step(c,.2);

如果使用的是 step(0.2,c)那么如果c > 0.2 返回1,c <= 0.2 返回0,反应到图形是就是黑白块的显著分割

如果反过来 step(c,0.2) 的结果就是颠倒黑白显示,原理很好理解 如果0.2 > c 返回1,如果0.2 <= c返回0,也就是 c < 0.2 => 1 c >= 0.2 => 0 正好与上述的方法相反。

 3: dot(a,b) 在着色器中,dot() 函数通常用于计算两个向量的点积。点积是将两个向量相乘并将结果相加得到的标量值。dot() 函数在着色器中经常用于计算光照模型中的光照强度,或者进行向量投影、判断两个向量的相关性等操作

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    // Normalized pixel coordinates (from 0 to 1)
    vec2 uv = fragCoord/iResolution.xy;
    uv -= 0.5;
    
    uv.x *= iResolution.x / iResolution.y;
    
    
    vec3 col = vec3(0.);
    //uv = abs(uv);
    
    // 根据uv坐标来决定哪些地方显示白色那些地方显示黑色 c只是控制颜色的显示,
    // uv决定哪些地方显示那些颜色
    float c = dot(uv,vec2(3.,1.));
    col += c;
    
    // 0.2 <= c => 0 0.2 > c => 1 step(.2,c) reverse color
    //col += step(c,0.2);
    
    

    // Output to screen
    fragColor = vec4(col,1.0);
}

 可能单纯的dot函数你并不能看出来图形为什么这么显示,那么知道dot的数学公式之后你会豁然开朗的感觉 dot(a,b) = a.x * b.x + a.y * b.y

那么上面的dot(uv,vec2(3,1)) 表示的就是 c = uv.x * 3 + uv.y * 1 也就是 0 = 3x + y - c 怎么样这个公式熟悉不熟悉,这就是高中学到的曲线方程,再想到高中学到的曲线的动态规划 曲线的右上方的点都大于零,曲线上的点都等于零,曲线的左下方小于零,这样不是很直观我还是上图吧:

 移动d滑块就会发现,d > 0的时候曲线是向右上方移动的,d<0的时候是向曲线的左下方移动的,所以图像显示成下图这样也就不奇怪了,这样你就知道了图形为啥这样显示了:

 结合上面的abs方法,我们打开abs会发现,所得到的图形就是右上角的图像经过x轴y轴两次对折得到的结果

 

 接着看step怎么控制图形的形状的 我们打开 col += step(0.2,c),可以看到 中间出现了菱形的黑色色块,为什么是黑色的并且 为什么跟上图的大小差别那么大,原因就是0.2控制了菱形显示的大小,只要是大于0.2的像素都会被step函数跃迁到1这个值,所以就得到如下的结果

如果我们不想让中间的黑块显示成黑色的而是想让它显示白色的怎么办呢,那好办直接反转 step函数的两个参数就可以了 step(c,0.2)

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

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

相关文章

MySQL双主架构、主从架构

为什么要对数据库做优化&#xff1f; MySQL官方说法&#xff1a; 单表2000万数据就达到瓶颈了。所以为了保证查询效率&#xff0c;要让每张表的大小得到控制。 MySQL主主架构 主数据库都负责增删改查。 比如有1000W的数据&#xff0c;有两个主数据库&#xff0c;就将数据分流给…

古巴勒索软件-CVE-2023-27532工具利用

黑莓捕获古巴勒索软件&#xff0c;其中一项工具有关CVE漏洞工具利用&#xff0c;利用有关CVE-2023-27532编号的漏洞利用工具进行投放。 MD5 9a3349f062130201a3dc16e78d5ab05d SHA-1 96e0a6a2aa12ed572fea9a1a858c903356bce1ab SHA-256 cf87a44c575d391df668123b05c207eef0…

代码随想录 (四)字符串

1.反转字符串 class Solution { public:void reverseString(vector<char>& s) {for (int i 0, j s.size() - 1; i < s.size()/2; i, j--) {swap(s[i],s[j]);}} };2.反转字符串II 直接用reverse&#xff08;是左闭右开的&#xff09; std::reverse 是 C 标准库中…

【2023深圳杯数学建模A题思路模型与代码分享】

2023深圳杯数学建模A题 A题 影响城市居民身体健康的因素分析解题思路第一问第二问第三问第四问 技术文档第一问完整代码写在最后 A题 影响城市居民身体健康的因素分析 以心脑血管疾病、糖尿病、恶性肿瘤以及慢性阻塞性肺病为代表的慢性非传染性疾病&#xff08;以下简称慢性病…

TCP性能机制

延迟应答 为什么有延迟应答 发送方如果长时间没有收到ACK应答&#xff0c;则会触发超时重传机制&#xff0c;重新发送数据包。但如果接收数据的主机立刻返回ACK应答, 这时候返回的窗口可能比较小&#xff0c;发送方一次只能发少量数据&#xff0c;效率较低。 举个例子理解一…

高性能服务器NodejsExpress快速构建Web

目录 1 Express基本使用1.1 托管静态资源 2 Express 路由3 Express 中间件3.1 全局中间件3.2 局部中间件3.3 中间件分类 4 CORS 跨域资源共享4.1 cors 中间件解决跨域4.2 CORS4.3 CORS 常见响应头4.4 CORS 请求分类 1 Express基本使用 官网传送门(opens new window) 基于 Node.…

简单计算器的实现(含转移表实现)

文章目录 计算器的一般实现使⽤函数指针数组的实现&#xff08;转移表&#xff09; 计算器的一般实现 通过函数的调用&#xff0c;实现加减乘除 # define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int Add(int x, int y) {return x y; }int Sub(int x, int y) {retur…

计算机中找不到msvcp140.dll丢失怎么弄?程序员都是这样解决的

msvcp140.dll是Microsoft Visual C 2015 Redistributable Package的一部分&#xff0c;它是一个运行时库文件&#xff0c;提供了许多C标准库函数的实现。如果缺少这个文件&#xff0c;可能会导致一些程序无法正常运行&#xff0c;例如一些游戏、应用程序等。为了解决这个问题&a…

【Unity】如何制作小地图

我们为什么要制作小地图呢&#xff1f; 原因很简单&#xff1a; 导航和定位&#xff1a;小地图可以显示玩家当前位置以及周围环境的概览。这使得玩家能够更好地导航和定位自己在游戏中的位置&#xff0c;找到目标或避开障碍物。场景了解&#xff1a;通过小地图&#xff0c;玩…

Presto 介绍

目录 Presto 介绍Presto 架构Coordinator协调器节点发现服务&#xff08;discovery service&#xff09;工作节点基于连接器的架构查询执行模型查询优化JVM 配置Presto Web UIPresto 内存管理Presto 任务并发性Presto 工作节点调度Presto 网络数据交换Presto 资源组 Presto 介绍…

公司电脑文件数据加密系统

电脑文件透明加密软件是一种可以对文件进行加密的软件&#xff0c;这类软件能够在用户无感知的情况下对文件进行加密&#xff0c;使得文件的安全性得到保障。 PC访问地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 智能透明加…

Java抽象类详解

抽象类 抽象类的概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类。比如&#xff1a; 说…

C语言刷题(13)

第一题 第二题 第三题 第四题 第五题 第六题 第七题 注意 1.nsqrt(n)&#xff0c;sqrt本身不会将n开根 2.初始化已经令sumn了&#xff0c;故相加的个数为m-1次

机器学习在大数据分析中的应用

文章目录 机器学习在大数据分析中的原理机器学习在大数据分析中的应用示例预测销售趋势客户细分和个性化营销 机器学习在大数据分析中的前景和挑战前景挑战 总结 &#x1f389;欢迎来到AIGC人工智能专栏~探索机器学习在大数据分析中的应用 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&…

Java面试题(2) 两个线程,交替打印100次A和B

目录 一、实现方式一实现思路&#xff1a;代码实现&#xff1a;执行结果&#xff1a; 二、实现方式二实现思路&#xff1a;代码实现&#xff1a;执行结果&#xff1a; 三、思考 一、实现方式一 实现思路&#xff1a; 代码实现&#xff1a; ThreadTest.java package com.demo…

Elasticsearch算分优化方案之rescore_query

简介 今天来说一说Elasticsearch 的重新评分&#xff0c;即在检索出来一次结果的基础上在进行检索提升数据排序效果&#xff0c;但是仅对查询或者post_filter阶段返回的前多少条进行二次查询。在每个分片上进行二次检索的文档数量时可以通过window_size 控制的&#xff0c;该参…

PHP8中自定义函数-PHP8知识详解

1、什么是函数&#xff1f; 函数&#xff0c;在英文中的单词是function&#xff0c;这个词语有功能的意思&#xff0c;也就是说&#xff0c;使用函数就是在编程的过程中&#xff0c;实现一定的功能。即函数就是实现一定功能的一段特定代码。 在前面的教学中&#xff0c;我们已…

甜椒叶病害识别(Python代码,pyTorch框架,深度卷积网络模型,很容易替换为其它模型,带有GUI识别界面)

代码运行要求&#xff1a;Torch>1.13.1即可 1.数据集介绍&#xff1a; 第一个文件夹是细菌斑叶&#xff08;3460张&#xff09; 第二个文件夹是 健康&#xff08;4024张&#xff09; 2.整个文件夹 data文件夹存放的是未被划分训练集和测试集的原始照片 picture文件夹存放的…

系统架构:数据库

文章目录 数据库设计关系代数规范化理论求候选键特殊函数依赖Armstrong公理 数据库设计 步骤产出说明1.根据数据要求和处理要求进行需求分析数据流图、数据字典、需求说明书等分析数据流向、数据详细含义等&#xff0c;分析具体需求2.对现实世界进行抽象&#xff0c;进行概念结…

DBeaver 23.1.4发布

导读DBeaver 23.1.4发布,修复和添加了不少功能。 SQL 编辑器 修复了表别名生成问题&#xff08;重复别名问题&#xff09;自动建议现在尊重 “空行是查询分隔符 “选项在某些情况下大大提高了自动建议计算性能修复了别名补全问题&#xff08;冗余空格问题&#xff09;修复了无…