当前位置: 首页 > news >正文

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

正确的做法应该是上 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.lryc.cn/news/311116.html

相关文章:

  • 获取PDF中的布局信息——如何获取段落
  • Laya2.13.3在Web条件下使用键盘控制相机移动
  • centos系统服务器在Jenkins执行playwright UI自动化测试框架
  • boost.redis崩溃的解决方法
  • 蓝桥杯——123
  • 嵌入式基础知识-信号量,PV原语与前趋图
  • 代码遗产:探索祖传代码的历史、挑战与现代融合艺术
  • Vue3:用vite创建Vue3项目
  • STM32 (2)
  • docker部署nginx+反向代理配置/代理宿主机网段服务器
  • 初识Hive
  • Google发布Genie硬杠Sora:通过大量无监督视频训练最终生成可交互虚拟世界
  • 全球首台!未磁科技256通道无液氦脑磁图仪及芯片化原子磁力计正式发布
  • openssl3.2 - exp - 内存操作(建立,写入,读取)配置
  • 前端食堂技术周刊第 114 期:Interop 2024、TS 5.4 RC、2 月登陆浏览器的新功能、JSR、AI SDK 3.0
  • #QT(信号与槽)
  • go 设置滚动日志
  • Rollup入门学习:前端开发的构建利器
  • 游戏寻路之A*算法(GUI演示)
  • 软件工程顶会——ICSE '24 论文清单、摘要
  • Vue点击复制到剪切板
  • 链路负载均衡之DNS透明代理
  • 2024大语言模型LLM基础|语义搜索Semantic_Search全解
  • vue中使用echarts实现人体动态图
  • 结构化思维助力Prompt创作:专业化技术讲解和实践案例
  • 【0272】postgres内核分配 MyBackendId 实现原理(MyBackendId、MyProc、shmInvalBuffer)(三)
  • AUKFUKF的MATLAB程序,含源码
  • STM32(13)串口
  • Element(Java后端入门篇)
  • qt5和gstreamer开发环境安装配置