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

threejs(11)-精通着色器编程(难点)2

一、shader着色器编写高级图案

小日本国旗

在这里插入图片描述

precision lowp float;
varying vec2 vUv;
float strength = step(0.5,distance(vUv,vec2(0.5))+0.25) ;
gl_FragColor =vec4(strength,strength,strength,strength);

绘制圆

在这里插入图片描述

precision lowp float;
varying vec2 vUv;
float strength = 1.0 - step(0.5,distance(vUv,vec2(0.5))+0.25) ;
gl_FragColor =vec4(strength,strength,strength,strength);

圆环

在这里插入图片描述

precision lowp float;
varying vec2 vUv;
float strength = step(0.5,distance(vUv,vec2(0.5))+0.35);
strength *= (1.0 - step(0.5,distance(vUv,vec2(0.5))+0.25));
gl_FragColor =vec4(strength,strength,strength,strength);

渐变环

在这里插入图片描述

precision lowp float;
varying vec2 vUv;
float strength =  abs(distance(vUv,vec2(0.5))-0.25) ;
gl_FragColor =vec4(strength,strength,strength,1);

打靶

在这里插入图片描述

precision lowp float;
varying vec2 vUv;
float strength = step(0.1,abs(distance(vUv,vec2(0.5))-0.25));
gl_FragColor =vec4(strength,strength,strength,1);

波浪环

在这里插入图片描述

precision lowp float;
vec2 waveUv = vec2(vUv.x,vUv.y+sin(vUv.x*30.0)*0.1);
loat strength = 1.0 - step(0.01,abs(distance(waveUv,vec2(0.5))-0.25));
gl_FragColor =vec4(strength,strength,strength,1);

在这里插入图片描述

precision lowp float;
vec2 waveUv = vec2(vUv.x+sin(vUv.y*30.0)*0.1,vUv.y+sin(vUv.x*30.0)*0.1);
loat strength = 1.0 - step(0.01,abs(distance(waveUv,vec2(0.5))-0.25));
gl_FragColor =vec4(strength,strength,strength,1);

在这里插入图片描述

precision lowp float;
vec2 waveUv = vec2(vUv.x+sin(vUv.y*100.0)*0.1,vUv.y+sin(vUv.x*100.0)*0.1);
float strength = 1.0 - step(0.01,abs(distance(waveUv,vec2(0.5))-0.25)) ;
gl_FragColor =vec4(strength,strength,strength,1);

根据角度显示视图

在这里插入图片描述

precision lowp float;
float angle = atan(vUv.x,vUv.y);
float strength = angle;
gl_FragColor =vec4(strength,strength,strength,1);

根据角度实现螺旋渐变 雷达扫描

在这里插入图片描述

precision lowp float;
float angle = atan(vUv.x-0.5,vUv.y-0.5);
float strength = (angle+3.14)/6.28;
gl_FragColor =vec4(strength,strength,strength,1);

实现雷达扫射-通过时间实现动态选择

在这里插入图片描述

precision lowp float;
vec2 rotateUv = rotate(vUv,3.14*0.25,vec2(0.5));
vec2 rotateUv = rotate(vUv,-uTime*5.0,vec2(0.5));
float alpha =  1.0 - step(0.5,distance(vUv,vec2(0.5)));
float angle = atan(rotateUv.x-0.5,rotateUv.y-0.5);
float strength = (angle+3.14)/6.28;
gl_FragColor =vec4(strength,strength,strength,1);

万花筒

在这里插入图片描述

precision lowp float;
float angle = atan(vUv.x-0.5,vUv.y-0.5)/PI;
float strength = mod(angle*10.0,1.0);
gl_FragColor =vec4(strength,strength,strength,1);

光芒四射

在这里插入图片描述

precision lowp float;
float angle = atan(vUv.x-0.5,vUv.y-0.5)/(2.0*PI);
float strength = sin(angle*100.0);
gl_FragColor =vec4(strength,strength,strength,1);

使用噪声实现烟雾、波纹效果

在这里插入图片描述

precision lowp float;
// 噪声函数
float noise (in vec2 _st) {vec2 i = floor(_st);vec2 f = fract(_st);// Four corners in 2D of a tilefloat a = random(i);float b = random(i + vec2(1.0, 0.0));float c = random(i + vec2(0.0, 1.0));float d = random(i + vec2(1.0, 1.0));vec2 u = f * f * (3.0 - 2.0 * f);return mix(a, b, u.x) +(c - a)* u.y * (1.0 - u.x) +(d - b) * u.x * u.y;
}
float strength = noise(vUv);
gl_FragColor =vec4(strength,strength,strength,1);

通过时间设置波形

在这里插入图片描述

precision lowp float;
// 噪声函数
float noise (in vec2 _st) {vec2 i = floor(_st);vec2 f = fract(_st);// Four corners in 2D of a tilefloat a = random(i);float b = random(i + vec2(1.0, 0.0));float c = random(i + vec2(0.0, 1.0));float d = random(i + vec2(1.0, 1.0));vec2 u = f * f * (3.0 - 2.0 * f);return mix(a, b, u.x) +(c - a)* u.y * (1.0 - u.x) +(d - b) * u.x * u.y;
}
float strength = step(0.5,noise(vUv * 100.0)) ;
gl_FragColor =vec4(strength,strength,strength,1);

使用gui调试

const params = {uFrequency: 10,uScale: 0.1,
};...
// 创建着色器材质;
const shaderMaterial = new THREE.ShaderMaterial({vertexShader: basicVertexShader,fragmentShader: basicFragmentShader,uniforms: {uColor: {value: new THREE.Color("purple"),},// 波浪的频率uFrequency: {value: params.uFrequency,},// 波浪的幅度uScale: {value: params.uScale,},// 动画时间uTime: {value: 0,},uTexture: {value: texture,},},side: THREE.DoubleSide,transparent: true,
});
....
gui.add(params, "uFrequency").min(0).max(50).step(0.1).onChange((value) => {shaderMaterial.uniforms.uFrequency.value = value;});
gui.add(params, "uScale").min(0).max(1).step(0.01).onChange((value) => {shaderMaterial.uniforms.uScale.value = value;});
float strength = step(uScale,cnoise(vUv * 10.0+uTime)) ;
gl_FragColor =vec4(strength,strength,strength,1);

在这里插入图片描述

发光路径

在这里插入图片描述

float strength =1.0 - abs(cnoise(vUv * 10.0)) ;
gl_FragColor =vec4(strength,strength,strength,1);

使用混合函数混颜色

在这里插入图片描述

    // 使用混合函数混颜色vec3 purpleColor = vec3(1.0, 0.0, 1.0);vec3 greenColor = vec3(1.0, 1.0, 1.0);vec3 uvColor = vec3(vUv,1.0);float strength = step(0.9,sin(cnoise(vUv * 10.0)*20.0))  ;vec3 mixColor =  mix(greenColor,uvColor,strength);// gl_FragColor =vec4(mixColor,1.0);gl_FragColor =vec4(mixColor,1.0);

相关文章:

threejs(11)-精通着色器编程(难点)2

一、shader着色器编写高级图案 小日本国旗 precision lowp float; varying vec2 vUv; float strength step(0.5,distance(vUv,vec2(0.5))0.25) ; gl_FragColor vec4(strength,strength,strength,strength);绘制圆 precision lowp float; varying vec2 vUv; float strength 1…...

配置cuda和cudnn出现 libcudnn.so.8 is not a symbolic link问题

cuda版本为11.2 问题如图所示: 解决办法: sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.1.1 /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_adv_train.so.8 sudo ln -sf /usr/local/cuda-11.2/targ…...

“目标值排列匹配“和“背包组合问题“的区别和leetcode例题详解

1 目标值排列匹配 1.1 从目标字符串的角度来看,LC139是一个排列问题,因为最终目标子串的各个字符的顺序是固定的? 当我们从目标字符串 s 的角度来看 LC139 “单词拆分” 问题,确实可以认为它涉及到排列的概念,但这种…...

火星加载WMTS服务

这是正常的加载瓦片 http://192.168.1.23:8008/geoserver/mars3d/gwc/service/wmts?tilematrixEPSG%3A4326%3A7&layermars3d%3Abuffer&style&tilerow46&tilecol197&tilematrixsetEPSG%3A4326&formatimage%2Fpng&serviceWMTS&version1.0.0&…...

为什么要学习去使用云服务器,外网 IP能干什么,MAC使用Termius连接阿里云服务器。保姆级教学

目录 引言 可能有人想问为什么要学习云服务器? (获取Linux环境,获得外网IP) 二、安装教程 引言 可能有人想问为什么要学习云服务器? (获取Linux环境,获得外网IP) 1.虚拟机(下策) …...

VS c++多文件编译

前言:记录下我这个菜鸡学习的过程,如有错误恳请指出,不胜感激! 1.简单多文件编译调试 文件目录: 编译: -g选项是告诉编译器生成调试信息,这样可以在程序崩溃或出现错误时更容易地进行调试。这…...

JVM关键指标监控(调优)

JVM 99%情况下不需要调优 使用性能更好的垃圾回收器 核心指标 针对单台服务器而言: jvm.gc.time: 每分钟GC耗时在1s以内 500ms以内最佳 jvm.gc.meantime: 每次YGC耗时在100ms以内,50ms以内最佳 jvm.fullgc.count: FGC(老生代垃圾回收)最多几小时1次&…...

【Proteus仿真】【Arduino单片机】LCD1602-IIC液晶显示

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用PCF8574、LCD1602液晶等。 主要功能: 系统运行后,LCD1602液晶显示各种效果。 二、软件设计 /* 作者:嗨小…...

skynet学习笔记03— 服务

01、API newservice(name, ...): 阻塞的形势启动一个名为 name 的新服务,待start函数执行完后会返回这个服务的地址。uniqueservice(name, ...):针对于当前节点,启动一个唯一服务(相当于单例),…...

34 Feign最佳实践

2.4.2.抽取方式 将Feign的Client抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用。 例如,将UserClient、User、Feign的默认配置都抽取到一个feign-api包中,所有微服务引用该依赖包…...

软文推广中如何搭建媒体矩阵

媒体矩阵简单理解就是在不同的媒体平台上,根据运营目标和需求,建立起全面系统的媒体布局,进行多平台同步运营。接下来媒介盒子就来和大家聊聊,企业在软文推广过程中为什么需要搭建媒体矩阵,又该如何搭建媒体矩阵。 一、…...

Unity地面交互效果——5、角色足迹的制作

大家好,我是阿赵。   之前几篇文章,已经介绍了地面交互的轨迹做法。包括了法线、曲面细分还有顶点偏移。Shader方面的内容已经说完了,不过之前都是用一个球来模拟轨迹,这次来介绍一下,怎样和角色动作结合&#xff0c…...

Centos8安装出错问题

科普介绍: CentOS 8 是一个基于 Linux 的操作系统,是 Red Hat Enterprise Linux (RHEL)的免费和开源版本。它提供了稳定、安全和可靠的基础设施,适用于服务器和桌面环境。CentOS 8 是 CentOS 系列中最新的版本&#x…...

计算机网络技术

深入浅出计算机网络 微课视频_哔哩哔哩_bilibili 第一章概述 1.1 信息时代的计算机网络 1. 计算机网络各类应用 2. 计算机网络带来的负面问题 3. 我国互联网发展情况 1.2 因特网概述 1. 网络、互连网(互联网)与因特网的区别与关系 如图所示&#xff0…...

当电脑桌面黑屏,而你只有一个鼠标该怎么办(重启方法的平替)

作为一个打工人 电脑是不是黑屏简直是routine了 我们都知道重启能解决一切问题 但是!! 如果你只有一个鼠标 电脑因为种种原因没法重启 该怎么办呢? 别慌 下面的方法非常灵验 1.按住ctrlShiftEsc 调出任务管理器;此项为必须&#xf…...

Leetcode2833. 距离原点最远的点

Every day a Leetcode 题目来源:2833. 距离原点最远的点 解法1:贪心 要使得到达的距离原点最远的点,就看 left 和 right 谁大,将 left 和 right 作为矢量相加,再往同方向加上 underline。 答案即为 abs(left - rig…...

chrome 的vue3的开发者devtool不起作用

问题: 刚刚vue2升级到vue3,旧的devtool识别不了vue3数据。 原因: devtool版本过低。升级到最新。 解决: 去github下载vuetool项目代码: GitHub - vuejs/devtools: ⚙️ Browser devtools extension for debugging…...

Redis数据结构七之listpack和quicklist

本文首发于公众号:Hunter后端 原文链接:Redis数据结构七之listpack和quicklist 本篇笔记介绍 listpack 和 quicklist 两种结构 按照顺序,本来应该先介绍 quicklist 的结构,quicklist 在 7.0 之前的版本是由双向链表和压缩列表构成…...

单词规律问题

给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 示例1: 输入: pattern “abba”, s “dog cat cat d…...

蓝桥杯每日一题2023.11.8

题目描述 题目分析 对于输入的abc我们可以以a为年也可以以c为年,将abc,cab,cba这三种情况进行判断合法性即可,注意需要排序去重,所以考虑使用set 此处为纯模拟的写法,但使用循环代码会更加简洁。 方法一: #include&…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...

Web后端基础(基础知识)

BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...