【threejs】火焰特效制作

news2024/10/9 4:17:17

2024-06-26 08-57-16火焰

shader

来源

   //shadertory:https://www.shadertoy.com/view/ctVGD1
   //shadertory:https://www.shadertoy.com/view/ml3GWs 

代码

	import { DoubleSide, ShaderChunk, ShaderMaterial } from "three";

export default function getFireMaterial() {
  //https://www.shadertoy.com/view/ctVGD1
  /**
   一个从玻璃花纹修改来的火焰特效
   shadertory:https://www.shadertoy.com/view/ctVGD1
   shadertory:https://www.shadertoy.com/view/ml3GWs 
   */
  const vertex = `
${ShaderChunk.logdepthbuf_pars_vertex}
bool isPerspectiveMatrix(mat4) {
    return true;
}

varying vec4 m_pos;
varying vec2 vUv;
varying vec3 _flame;

uniform float uTime;

vec2 hash( vec2 p ){
	p = vec2( dot(p,vec2(127.1,311.7)), dot(p,vec2(269.5,183.3)) );
	return -1.0 + 2.0*fract(sin(p)*43758.5453123);
}
float noise1( in vec2 p ){
    // noise function from IQ himself
    const float K1 = 0.366025404; // (sqrt(3)-1)/2;
    const float K2 = 0.211324865; // (3-sqrt(3))/6;

	vec2  i = floor( p + (p.x+p.y)*K1 );
    vec2  a = p - i + (i.x+i.y)*K2;
    float m = step(a.y,a.x); 
    vec2  o = vec2(m,1.0-m);
    vec2  b = a - o + K2;
	vec2  c = a - 1.0 + 2.0*K2;
    vec3  h = max( 0.5-vec3(dot(a,a), dot(b,b), dot(c,c) ), 0.0 );
	vec3  n = h*h*h*h*vec3( dot(a,hash(i+0.0)), dot(b,hash(i+o)), dot(c,hash(i+1.0)));
    return dot( n, vec3(70.0) );
}
float noise2(in vec2 p){
    return
        0.500*noise1(p*1.0)
       +0.250*noise1(p*2.0)
       +0.125*noise1(p*4.0)
       +0.063*noise1(p*8.0)
    ;
}
vec2 noise3(in vec2 p){
    return vec2(noise2(p), noise2(p + 20.0));
}

vec2 noise4(in vec2 p){
    return noise3(p + noise3(p));
}

vec2 transform(in vec2 p){
    return p + 0.2 * noise4(1.4 * p - vec2(0.0, uTime * 0.8));
}

vec3 ud(vec2 p) {
    p.x = abs(p.x);
    float q = p.x * (p.y * 11.0 + 1.7);
    p.x = max(p.x, q);
    return vec3(1.0, 0.1, 0.0) / pow(length(p), 5.0) * 0.000008;
}

void main () {
    vUv = uv;
    vec2 st = uv-.5;
     _flame = ud(transform(st * vec2(1.0, 0.5)));    
    vec3 newPosition = normal*vec3(0,0,0)+position;
    gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0);

      ${ShaderChunk.logdepthbuf_vertex}
}
    `;

  // 片元着色器代码
  const fragment = `
${ShaderChunk.logdepthbuf_pars_fragment}
precision mediump float;


varying vec2 vUv;
varying vec3 _flame;



void main() {

  vec2 uv = vUv;

  vec3 color = vec3(0.,0.,1.);









  gl_FragColor = vec4(_flame,length(_flame));
  ${ShaderChunk.logdepthbuf_fragment}
}
    `;

  const uniforms = {
    uTime: { value: 1.0 },
  };
  const material = new ShaderMaterial({
    uniforms: {
      uTime: { value: 1.0 },
    },
    vertexShader: vertex,
    fragmentShader: fragment,
    side: DoubleSide,
    transparent: true,
    depthWrite:true,
    depthTest:true,
    alphaTest: 0.5

  });
  return material;
}

Mesh

  let geometry = new PlaneGeometry(1, 1, 50, 50);
    let material = getFireMaterial();

    this.geometry = geometry;
    this.material = material;

    let mesh = new Mesh(geometry, material);
    this.mesh = mesh;
    let mesh2 = mesh.clone();
    mesh2.rotation.y = Math.PI / 2;
    this.add(mesh, mesh2);

动画

	  let loop = () => {
      requestAnimationFrame(loop);
      if ( this.material) {
        this.material.uniforms.uTime.value += 0.01;
      }
    };
    loop();

效果展示

在这里插入图片描述

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

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

相关文章

嵌入式EMC之TVS管

整理一些网上摘抄的笔记: TVS管认识: TVS的Vc要比,DCDC的最大承受电压要小

mysql workbench使用schema视图导出表和列结构到excel

目的:导出所有表和列的名字和注释 很多时候没有正规的数据库文档,为了快速交流啊,需要一个快捷的基础。数据库建表的时候可能有注释,也可能没有注释。有当然好,查看注释就能清楚很多,没有的话最好一个一个补…

高效文件分类管理:快速将不同类型文件素材归类到专属文件夹,告别混乱,让工作更高效!

在数字化时代,我们每天都会产生大量的文件素材,从图片、文档到音频、视频,种类繁多,数量庞大。如果这些文件没有得到有效的管理和归类,不仅会让我们的工作变得混乱无序,还会影响我们的工作效率。那么&#…

文华WH7主图多空预警系统指标公式源码

RSV:(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;//收盘价与N周期最低值做差,N周期最高值与N周期最低值做差,两差之间做比值定义为RSV K:SMA(RSV,3,1);//RSV的移动平均 D:SMA(K,3,1);//K值的移动平均 DIFF : EMA(CLOSE,12) - EMA(CLOSE,26); D…

python-17-零基础自学python-

学习内容:《python编程:从入门到实践》第二版 知识点: 类、子类、继承、调用函数 练习内容: 练习9-6:冰激凌小店 冰激凌小店是一种特殊的餐馆。编写一个名为IceCreamStand的类,让它继承为完成练习9-1或…

spring原理篇

第三方bean默认为方法名 自动配置 自动配置的原理 springboot的自动配置原理 首先是从 SpringBootApplication这个注解出发 有一个ComponentScan()默认扫描同级包及其子包 第二个注解是springbootconfiguration 声明当前类是一个配置类 第三个是核心 enableAutoConfigurati…

HRSC2016 :推动光学遥感图像细粒度船舶检测的创新引擎(目标检测)

亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 摘要&a…

华为OD机试【高矮个子排队】(java)(100分)

1、题目描述 现在有一队小朋友,他们高矮不同,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。 我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,每一个“高”位置的小朋友要比相邻的位置高或…

pp 学习一 生产模块主数据

生产成本:原材料是什么,价格多少,人工耗费时间,以及其他的费用 离散制造:有生产订单。工序是分开的(可以停) 重复制造:没有生产订单(可能有客户下达的任务单或者计划订…

昇思MindSpore基本介绍

昇思MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景统一部署三大目标。 其中,易开发表现为API友好、调试难度低;高效执行包括计算效率、数据预处理效率和分布式训练效率;全场景则指框架同时支持云、边缘以…

学习TTS遇到的问题2 什么是TCN模型

学习TTS遇到的问题2 什么是TCN模型 什么是TCN模型怎么理解 TCN中的 dilation?什么是 Dilation具体例子数学表达作用例子代码示例 什么是TCN模型 https://juejin.cn/post/7262269863343079479 https://blog.csdn.net/weixin_57726558/article/details/132163074 由下…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验9 IPv4地址 — 划分子网

一、实验目的 1.学习划分子网的方法; 2.验证子网掩码的作用。 二、实验要求 1.使用Cisco Packet Tracer仿真平台; 2.观看B站湖科大教书匠仿真实验视频,完成对应实验。 三、实验内容 1.构建网络拓扑; 2.划分子网; …

涵盖多项功能的文件外发系统,了解一下

伴随着业务范围的不断扩大,信息化的迅速发展,企业与客户、供应商等合作伙伴之间的文件交换也愈加频繁,尤其涉及到核心数据,像核心技术、设计图纸等敏感数据,对其的保护也是越发重视。文件外发系统,应运而生…

CRS-1621: The IPMI configuration data CRS-1617: The information CRS-8503

环境介绍 19c rac 两个节点 现象描述: 2个节点的rac,只有节点1正常,节点2启动的时候,一直卡在 这里不动,当将节点1关闭后,再次重启的时候,也是卡在这里,最终会报错 在cssd日志中有…

.NET 一款系统遥测实现权限维持的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

《山西化工》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问:《山西化工》是不是核心期刊? 答:不是,是知网收录的第一批认定学术期刊。 问:《山西化工》级别? 答:省级。主办单位:山西省工业和信息化厅 主管单位:山…

【大数据技术原理与应用(概念、存储、处理、分析与应用)】第2章-大数据处理架构 Hadoop习题与知识回顾

文章目录 单选题多选题知识点回顾什么是Hadoop?Hadoop有哪些特性?Hadoop生态系统是怎么样的?(1) HDFS(2) HBase(3) MapReduce(4) Hive(5) Pig(6) Mahout(7) Zookeeper(8) Flume(9) Sqoop(10) Ambari 单选题 1、下列哪个不属于Hadoop的特性&am…

Docker - Oracle Database 23ai Free

博文目录 文章目录 说明命令NavicatSYSTEMPDBADMIN 扩展公共用户本地用户 说明 Oracle 官方镜像仓库 Database 23ai Free | Oracle Docker 官方没有提供 Oracle Database 相关镜像, 但是 Oracle 官方镜像仓库有提供, 打开上面的链接, 选择 Database, 选择合适的版本, 如 enter…

kafka-高级篇(下载安装、快速入门、使用场景)

文章目录 Kafka介绍Kafka使用场景kafka概述和安装kafka概述kafka安装配置 kafka快速入门创建项目导入依赖发送消息接收消息 kafka生产者详解发送类型参数详解 kafka消费者详解消息有序性Kafka消息有序性提交和偏移量 更多相关内容可查看 Kafka介绍 Apache Kafka是一个开源的分…

BarTender版软件下载及安装教程

​根据行业数据显示强大的配套应用软件甚至能够管理系统安全性、网络打印功能、文档发布、打印作业记录等,为满足不同的需要和预算,BarTender 提供四个版本,每个都拥有卓越的功能和特性。根据软件大数据显示多国语言支持:轻松设计…