shadertoy 游戏《来自星尘》摇杆复刻

news2024/12/26 12:01:49

正确的做法应该是上 noise 而不是叠加 sin 波,不过如果不想麻烦的话叠波还是一个不错的选择:整体效果如下,已经非常形似

直接上链接:Shader - Shadertoy BETA

float radiusScale = 0.9;
float variation(vec2 v1, vec2 v2, float strength, float speed)
{
    float v = dot(normalize(v1), normalize(v2));
	return sin(v * strength - iTime * speed) / 50.0
        + sin(v * strength * 3.0 - iTime * speed) / 450.0;
}

float paintCircle(vec2 uv, vec2 center, vec2 center2, float rad, float width, float strong, float speed)
{
    width *= radiusScale;
    rad *= radiusScale;
    
    vec2 diff = center - uv;
    float len = max(step(center2.y, uv.y) * length(center2 - uv) + step(uv.y, center.y) * length(center - uv), 
        abs(uv.x - center.x));

    float normal = max(-normalize(diff).y, 0.0) * max(-normalize(diff).y, 0.0);
    len += variation(diff, vec2(0.0, 1.0), strong, speed) * normal;
    len -= variation(diff, vec2(1.0, 0.0), strong, speed) * normal;

    rad -= 0.15 * max((uv.y - 0.55), 0.0);
    return step(abs(len - rad), width);
}


void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
	vec2 uv = fragCoord.xy / iResolution.xy;
    uv.y += 0.1;
    uv.x *= 1.5;
    uv.x -= 0.25;

    float color;
    float radius = 0.24 * radiusScale;
    float think1 = radius / 13.0;
    float think2 = think1 / 3.0;
    vec2 center = vec2(0.5, 0.5);

    color = max(color, paintCircle(uv, center, vec2(0.5, 0.7), radius, think1, 5.0, 7.2));
    color += paintCircle(uv, center, vec2(0.5, 0.72), radius + think1 / 2.0, think2, 6.5, 7.8);
    color = max(color, paintCircle(uv, center, vec2(0.5, 0.74), radius + think1 * 2.0, think2, 6.5, 8.4));
    color = max(color, paintCircle(uv, center, vec2(0.5, 0.76), radius + think1 * 2.0 + think2 * 4.0, think2, 7.0, 9.0));
    color = max(color, paintCircle(uv, center, vec2(0.5, 0.78), radius + think1 * 2.0 + think2 * 8.0, think2, 8.0, 10.2));

	fragColor = vec4(color * vec3(1.5 - uv.y, 1.0, 1.0), 1.0);
}

整体没啥难度,就不上教学了吧,链接里左边效果右边就是代码了,可以自行参考

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

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

相关文章

KCV(Key Check Value)的作用(验证密钥导入是否正确)与算法(DES/3DES或AES)示例

KCV的作用与算法 KCV(Key Check Value)的计算通常与加密算法有关,不同算法计算KCV的方式不同。以下是常见算法的KCV计算方法: DES/3DES算法: KCV是通过使用ECB模式的3DES加密8字节’00’来计算的。例如,…

【鸿蒙 HarmonyOS 4.0】弹性布局(Flex)

一、介绍 弹性布局(Flex)提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。容器默认存在主轴与交叉轴,子元素默认沿主轴排列,子元素在主轴方向的尺寸称为主轴尺寸,在交叉轴方向的尺寸称为交叉轴尺寸…

Pipy 进化:从可编程代理到应用引擎

网络功能变得越来越复杂,编写和维护的难度提升;新的基于 Pipy 的应用中,Pipy 角色从数据平面变成控制面,需要执行更多复杂非网络的逻辑;从长远来看,Pipy 将更像是一个常见的类似 shell/bash 的系统脚本工具…

如何在MinIO系统中进行配置并结合内网穿透实现公网远程连接上传文件

文章目录 前言1. 创建Buckets和Access Keys2. Linux 安装Cpolar3. 创建连接MinIO服务公网地址4. 远程调用MinIO服务小结5. 固定连接TCP公网地址6. 固定地址连接测试 前言 MinIO是一款高性能、分布式的对象存储系统,它可以100%的运行在标准硬件上,即X86等…

力扣hot100题解(python版33-35题)

33、排序链表 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4]示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5]示例 3&a…

你知道该如何使用 JS 创建 css 类样式吗?

前言 去年我为公司内部开发了一个浏览器插件,当时为了加快开发进度,我没有选用现成的插件框架,而是直接使用原生 JavaScript 搭配 Rollup 进行打包。由于这是一个浏览器插件,我不可避免地需要对页面元素进行操作,比如…

小太阳防倾倒开关原理

小太阳防倾倒开关是一种体积小巧、安装简便、灵敏度高的设备,其原理基于角度感应和光电技术。该开关具有精确的角度判断能力,无需机械接触,稳定性强,支持个性化角度设置,可根据需求进行水平、垂直或倒置安装。 在应用…

注意力机制(代码实现案例)

学习目标 了解什么是注意力计算规则以及常见的计算规则.了解什么是注意力机制及其作用.掌握注意力机制的实现步骤. 1 注意力机制介绍 1.1 注意力概念 我们观察事物时,之所以能够快速判断一种事物(当然允许判断是错误的), 是因为我们大脑能够很快把注意力放在事物…

STM32(16)使用串口向电脑发送数据

发送字节 发送数组 发送字符和字符串 字符: 字符串: 字符串在电脑中以字符数组的形式存储

最新AI系统ChatGPT网站H5系统源码,支持Midjourney绘画

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持GPT…

《互联网的世界》第四讲-拥塞控制与编码

需要澄清的一个误区是,拥塞绝不是发送的数据量太大导致,而是数据在极短的时间段内到达了同一个地方以至于超过了网络处理容量导致,拥塞的成因一定要考虑时间因素。换句话说,拥塞由大突发导致。 只要 pacing,再多的数据…

MongoDB开启事务

MongoDB开启事务 配置单节点。到路径C:\Program Files\MongoDB\Server\4.0\bin 使用记事本以管理员权限打开文件mongod.cfg添加如下配置: replication:replSetName: rs02. 重启MongoDB服务 3. 重启后执行命令 rs.initiate()

Python采集学习笔记-request的get请求和post请求

使用http://httpbin.org测试,一个简单的 HTTP 请求和响应服务。(需联网)1.导入requests包 import requests 2.测试get请求 url http://httpbin.org/get par {key1: value1, key2: value2} # 不带参数请求 r1 requests.get(url) # 带参数请求 r2 requests.get(url, paramspa…

数据库管理-第158期 Oracle Vector DB AI-09(20240304)

数据库管理158期 2024-03-04 数据库管理-第158期 Oracle Vector DB & AI-09(20240304)1 创建示例表2 添加过滤条件的向量近似查询示例1示例2示例3示例4示例5示例6示例7 总结 数据库管理-第158期 Oracle Vector DB & AI-09(20240304&a…

怎么采集GBK或GB2312等特殊字符编码的网站数据

如果要采集的网站是GBK或GB2312等特殊字符编码,采集结果可能是一堆看不懂的文字或乱码,无法使用。 通常网页文章采集工具有字符编码选项,默认是UTF-8(现在大部分网站都是),改选为GBK或GB2312字符编码即可&…

无人机/飞控--ArduPilot、PX4学习历程记录(1)

本篇博客用来记录个人学习记录,存放各种文章链接、视频链接、学习历程、实验过程和结果等等.... 最近在整无人机项目,接触一下从来没有接触过的飞控...(听着就头晕),本人纯小白。 目录 PX4、Pixhawk、APM、ArduPilot、Dronecode Dronekit…

【ArcPy】游标访问几何数据

访问质心坐标相关数据 结果展示 代码 import arcpy shppath r"C:\Users\admin\Desktop\excelfile\a2.shp" with arcpy.da.SearchCursor(shppath, ["SHAPE","SHAPEXY","SHAPETRUECENTROID","SHAPEX","SHAPEY",&q…

【Mybatis】批量映射优化 分页插件PageHelper 逆向工程插件MybatisX

文章目录 一、Mapper批量映射优化二、插件和分页插件PageHelper2.1 插件机制和PageHelper插件介绍2.2 PageHelper插件使用 三、逆向工程和MybatisX插件3.1 ORM思维介绍3.2 逆向工程3.3 逆向工程插件MyBatisX使用 总结 一、Mapper批量映射优化 需求: Mapper 配置文件很多时&…

高精准无人机激光雷达标定板

无人机激光雷达标定板是一种用于校准无人机激光雷达系统的工具,它可以帮助无人机获取更准确、更可靠的数据,从而提高无人机的导航精度和自主控制能力。本文将从无人机激光雷达标定板的基本概念、作用、应用领域、市场现状和发展趋势等方面进行介绍。 一…

LeetCode 1976.到达目的地的方案数:单源最短路的Dijkstra算法

【LetMeFly】1976.到达目的地的方案数:单源最短路的Dijkstra算法 力扣题目链接:https://leetcode.cn/problems/number-of-ways-to-arrive-at-destination/ 你在一个城市里,城市由 n 个路口组成,路口编号为 0 到 n - 1 &#xff…