当前位置: 首页 > 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&…...

AI专著生成新方式:揭秘高效写作工具,开启创作快速通道

学术专著的写作不仅考验着学者的学术水平,也在心理上对他们提出了挑战。与依赖团队合作的论文写作不同,专著的撰写往往是一个人独自完成的过程。从选题、结构设计到具体内容的编写和修改,每一步都需要作者耗费大量时间和精力。长时间的独自创…...

SAP BSP网页端开发实战:从SE80到MVC架构的完整指南

1. 从SE80开始:创建你的第一个BSP应用 第一次接触SAP BSP开发时,我被SE80这个"老古董"工具震惊了——它看起来像是上个世纪的产物,但功能却出奇地强大。打开SAP GUI,输入事务码SE80,你会看到一个树形结构的开…...

免费获取百度文库文档的简单高效方案

免费获取百度文库文档的简单高效方案 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 百度文库助手是一个专门为百度文库用户设计的实用工具,能够帮助你免费获取文库文档内容&#xff0…...

多权限批量处理技巧:react-native-permissions性能优化终极指南

多权限批量处理技巧:react-native-permissions性能优化终极指南 【免费下载链接】react-native-permissions An unified permissions API for React Native on iOS, Android and Windows. 项目地址: https://gitcode.com/gh_mirrors/re/react-native-permissions …...

DDrawCompat完整指南:如何让经典DirectX游戏在现代Windows上完美运行

DDrawCompat完整指南:如何让经典DirectX游戏在现代Windows上完美运行 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mir…...

航片匀色实战:CaptureOne与天工软件的高效处理技巧

1. 航片匀色的核心挑战与解决方案 航拍影像处理中最让人头疼的问题之一,就是天气条件导致的色彩不均匀。我处理过上百个航测项目,发现80%的航片都需要不同程度的匀色处理。特别是遇到雾霾、阴雨天气时,拍出来的照片就像蒙了一层灰纱&#xff…...

胡桃工具箱完整使用指南:免费开源原神Windows桌面助手终极教程

胡桃工具箱完整使用指南:免费开源原神Windows桌面助手终极教程 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-Source Genshin Impact Toolkit 🧰 项目地址: https://gitcode.com/GitHub_Trending/sn/…...

HarmonyOS 编译产物与包结构小知识

扒开 DevEco Studio 的引擎盖:HarmonyOS 编译产物与包结构深度逆向解析做鸿蒙开发的兄弟,多半都经历过这样一种“血压飙升”的时刻:功能辛辛苦苦写完了,一点运行,要么报模块找不到的错,要么打出来的包莫名其…...

NVIDIA Profile Inspector终极指南:解锁显卡隐藏性能的3个简单步骤

NVIDIA Profile Inspector终极指南:解锁显卡隐藏性能的3个简单步骤 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否觉得NVIDIA官方控制面板的设置选项太过有限?是否想要为…...

易语言彩信接口怎么调用?E语言Post实现多媒体数据批量下发

很多易语言开发者在对接富媒体下发能力时,常会遇到签名校验失败、多媒体编码异常、批量号码提交报错等问题。本文将完整拆解易语言彩信接口的调用逻辑,通过Post请求实现80KB以内图文音视频富媒体彩信的批量下发,给出可直接运行的源码与参数校…...