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

host绑定网站宁波seo在线优化哪家好

host绑定网站,宁波seo在线优化哪家好,济南做网站多少钱,建设银行新版网站上线大家好!我是 [数擎 AI],一位热爱探索新技术的前端开发者,在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步! 开发领域:前端开发 | A…

大家好!我是 [数擎 AI],一位热爱探索新技术的前端开发者,在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步!
开发领域:前端开发 | AI 应用 | Web3D | 元宇宙
技术栈:JavaScript、React、ThreeJs、WebGL、Go
经验经验:6 年+ 前端开发经验,专注于图形渲染和 AI 技术
演示地址:演示地址
开源项目:智简未来、晓智元宇宙、数字孪生引擎 、源码地址

演示地址:https://shader.shuqin.cc/4sfywn
源码地址]:https://github.com/dezhizhang/shadertoy

在这篇文章中,我们将通过 Three.js 实现一个简单而炫酷的热力渐变效果。我们将使用着色器(Shader)来模拟热力图,创造出动态的渐变效果。这种效果常用于可视化数据,或者只是为了增加网页的视觉冲击力。

项目概述

我们使用 Three.js 来创建一个全屏的 WebGL 场景,通过自定义的着色器(Shader)渲染一个动态的热力渐变效果。这个效果展示了从冷到热的渐变色,并通过动态的点位置变化模拟热力分布的变化。

环境搭建

首先,需要在 HTML 中引入 Three.js 库,我们使用了 CDN 来引入:

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>

这将为我们提供 Three.js 的核心功能,如创建场景、相机、渲染器以及应用自定义着色器等。

创建基本场景

在 JavaScript 中,我们首先创建了一个基础的 3D 场景,其中包括相机、渲染器以及全屏的平面几何体来显示效果。

let scene, camera, renderer, material;function init() {scene = new THREE.Scene();camera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1);renderer = new THREE.WebGLRenderer({ antialias: true });renderer.setSize(window.innerWidth, window.innerHeight);document.body.appendChild(renderer.domElement);
}
  • 相机:我们使用了正交相机(THREE.OrthographicCamera)来渲染二维平面,这种相机没有透视效果,适合渲染平面效果。
  • 渲染器:通过 THREE.WebGLRenderer 实现高效的 3D 渲染。
  • 全屏平面:为了将热力渐变效果显示为全屏,我们使用了一个 2x2 的平面几何体 (THREE.PlaneGeometry),并将其拉伸到全屏。
const plane = new THREE.PlaneGeometry(2, 2);
const mesh = new THREE.Mesh(plane, material);
scene.add(mesh);

自定义着色器

着色器(Shader)是实现热力渐变效果的核心部分。我们通过自定义的顶点着色器和片段着色器来控制每个像素的颜色变化。

顶点着色器

顶点着色器的作用是计算每个顶点的坐标和纹理坐标,在这里我们只是将纹理坐标传递给片段着色器:

vertexShader: `varying vec2 vUv;void main() {vUv = uv;gl_Position = vec4(position, 1.0);}
`

片段着色器

片段着色器的主要任务是根据热力分布计算每个像素的颜色。我们使用了一个简单的色彩渐变算法,将不同的权重值映射到不同的颜色,并生成最终的热力图效果。

fragmentShader: `precision highp float;uniform float iTime;uniform vec2 iResolution;varying vec2 vUv;// 渐变颜色定义const vec3 colors[5] = vec3[](vec3(0.,0.,0.6),vec3(0.,1.,1.),vec3(0.0,1.0,0.),vec3(1.0,1.0,0.),vec3(1.0,0.0,0.));const float points[5] = float[](0.0, 0.15, 0.5, 0.65, 1.0);vec3 gradian(vec3 c1, vec3 c2, float a) {return mix(c1, c2, a);}vec3 heat4(float weight) {if(weight <= points[0]) return colors[0];if(weight >= points[4]) return colors[4];for(int i = 1; i < 5; i++) {if(weight < points[i]) {float a = (weight - points[i-1]) / (points[i] - points[i-1]);return gradian(colors[i-1], colors[i], a);}}return vec3(0.0);}float d(vec2 a, vec2 b) {return pow(max(0.0, 1.0 - distance(a, b) / 0.6), 2.0);}void main() {vec2 uv = vUv * 4.0 - vec2(2.0);uv.x *= iResolution.x / iResolution.y;float totalWeight = 0.0;// 优化循环次数为常量表达式for (float i = 0.0; i < 112.0; i += 1.0) {totalWeight += 0.5 * d(uv, vec2(sin(iTime * 0.3 + i) * 2.0 + 2.0 * sin(i * i),cos(iTime * 0.4 + i * 1.5) * 2.0));}gl_FragColor = vec4(heat4(totalWeight), 1.0);}
`
  • 渐变颜色:我们定义了五个颜色,从深蓝到红色,代表从冷到热的渐变。
  • 权重计算:我们使用了一个简单的函数 d() 来计算每个像素的权重,根据距离和时间动态生成热力分布。

动画效果

我们使用 requestAnimationFrame 来创建一个平滑的动画效果。每一帧,时间和分辨率都会被更新,从而动态改变热力渐变效果的颜色。

function animate() {requestAnimationFrame(animate);material.uniforms.iTime.value = performance.now() / 1000;renderer.render(scene, camera);
}animate();

响应式设计

为了确保热力渐变效果在不同屏幕尺寸下都能正常显示,我们通过监听窗口尺寸变化事件来动态调整渲染器的尺寸和分辨率:

function onWindowResize() {const width = window.innerWidth;const height = window.innerHeight;renderer.setSize(width, height);material.uniforms.iResolution.value.set(width, height);
}window.addEventListener('resize', onWindowResize);

完整代码

import * as THREE from 'three';let scene, camera, renderer, material;function init() {// 初始化场景scene = new THREE.Scene();camera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1);renderer = new THREE.WebGLRenderer({ antialias: true });renderer.setSize(window.innerWidth, window.innerHeight);document.body.appendChild(renderer.domElement);// 着色器材质配置const uniforms = {iTime: { value: 0 },iResolution: { value: new THREE.Vector2() }};material = new THREE.ShaderMaterial({uniforms: uniforms,vertexShader: `varying vec2 vUv;void main() {vUv = uv;gl_Position = vec4(position, 1.0);}`,fragmentShader: `precision highp float;uniform float iTime;uniform vec2 iResolution;varying vec2 vUv;// 渐变颜色定义const vec3 colors[5] = vec3[](vec3(0.,0.,0.6),vec3(0.,1.,1.),vec3(0.0,1.0,0.),vec3(1.0,1.0,0.),vec3(1.0,0.0,0.));const float points[5] = float[](0.0, 0.15, 0.5, 0.65, 1.0);vec3 gradian(vec3 c1, vec3 c2, float a) {return mix(c1, c2, a);}vec3 heat4(float weight) {if(weight <= points[0]) return colors[0];if(weight >= points[4]) return colors[4];for(int i = 1; i < 5; i++) {if(weight < points[i]) {float a = (weight - points[i-1]) / (points[i] - points[i-1]);return gradian(colors[i-1], colors[i], a);}}return vec3(0.0);}float d(vec2 a, vec2 b) {return pow(max(0.0, 1.0 - distance(a, b) / 0.6), 2.0);}void main() {vec2 uv = vUv * 4.0 - vec2(2.0);uv.x *= iResolution.x / iResolution.y;float totalWeight = 0.0;// 优化循环次数为常量表达式for (float i = 0.0; i < 112.0; i += 1.0) {totalWeight += 0.5 * d(uv, vec2(sin(iTime * 0.3 + i) * 2.0 + 2.0 * sin(i * i),cos(iTime * 0.4 + i * 1.5) * 2.0));}gl_FragColor = vec4(heat4(totalWeight), 1.0);}`});// 创建全屏平面const plane = new THREE.PlaneGeometry(2, 2);const mesh = new THREE.Mesh(plane, material);scene.add(mesh);// 初始化分辨率onWindowResize();window.addEventListener('resize', onWindowResize);
}function onWindowResize() {const width = window.innerWidth;const height = window.innerHeight;renderer.setSize(width, height);material.uniforms.iResolution.value.set(width, height);
}function animate() {requestAnimationFrame(animate);material.uniforms.iTime.value = performance.now() / 1000;renderer.render(scene, camera);
}init();
animate();

总结

通过自定义的着色器和 Three.js,我们可以创建出动态的热力渐变效果,这在数据可视化、交互式网页中非常有用。希望这篇博客能帮助你理解如何使用 Three.js 和着色器创建炫酷的视觉效果。如果你对 Three.js 或者着色器有任何疑问,欢迎在评论区留言讨论。


文章转载自:
http://andvari.cwgn.cn
http://yestern.cwgn.cn
http://stellenbosch.cwgn.cn
http://lateritious.cwgn.cn
http://undutiful.cwgn.cn
http://readorn.cwgn.cn
http://isolatable.cwgn.cn
http://hombre.cwgn.cn
http://fluorine.cwgn.cn
http://coralliferous.cwgn.cn
http://undersea.cwgn.cn
http://naturism.cwgn.cn
http://hypochondrium.cwgn.cn
http://unencumbered.cwgn.cn
http://smoothen.cwgn.cn
http://misprision.cwgn.cn
http://homunculus.cwgn.cn
http://prolong.cwgn.cn
http://henny.cwgn.cn
http://mismanagement.cwgn.cn
http://dispart.cwgn.cn
http://significatory.cwgn.cn
http://enamine.cwgn.cn
http://psychasthenia.cwgn.cn
http://skibob.cwgn.cn
http://auxiliary.cwgn.cn
http://swither.cwgn.cn
http://gangrenopsis.cwgn.cn
http://cubbish.cwgn.cn
http://ashimmer.cwgn.cn
http://nor.cwgn.cn
http://fragmentized.cwgn.cn
http://loveboats.cwgn.cn
http://prescience.cwgn.cn
http://acidosis.cwgn.cn
http://electrosynthesis.cwgn.cn
http://autoplasty.cwgn.cn
http://mavin.cwgn.cn
http://monkeyish.cwgn.cn
http://tetraonid.cwgn.cn
http://domino.cwgn.cn
http://heatronic.cwgn.cn
http://orismology.cwgn.cn
http://lightface.cwgn.cn
http://acceptability.cwgn.cn
http://calcariferous.cwgn.cn
http://grandiloquence.cwgn.cn
http://housecleaning.cwgn.cn
http://antasthmatic.cwgn.cn
http://neurofibril.cwgn.cn
http://dawdle.cwgn.cn
http://demilune.cwgn.cn
http://tali.cwgn.cn
http://cockalorum.cwgn.cn
http://bothie.cwgn.cn
http://between.cwgn.cn
http://uniat.cwgn.cn
http://oma.cwgn.cn
http://thyrsus.cwgn.cn
http://orbivirus.cwgn.cn
http://squattage.cwgn.cn
http://blooey.cwgn.cn
http://vandalize.cwgn.cn
http://lupulone.cwgn.cn
http://rhymist.cwgn.cn
http://leila.cwgn.cn
http://tearing.cwgn.cn
http://epicentrum.cwgn.cn
http://israeli.cwgn.cn
http://senusi.cwgn.cn
http://chloralose.cwgn.cn
http://perpetuate.cwgn.cn
http://urbane.cwgn.cn
http://parapodium.cwgn.cn
http://awfulness.cwgn.cn
http://authoritatively.cwgn.cn
http://unseemly.cwgn.cn
http://biomechanics.cwgn.cn
http://lar.cwgn.cn
http://schatz.cwgn.cn
http://paramount.cwgn.cn
http://unperturbed.cwgn.cn
http://eutomous.cwgn.cn
http://superhelical.cwgn.cn
http://dispraise.cwgn.cn
http://impregnability.cwgn.cn
http://terebic.cwgn.cn
http://antihyperon.cwgn.cn
http://edible.cwgn.cn
http://affective.cwgn.cn
http://aspirin.cwgn.cn
http://exsilentio.cwgn.cn
http://linguistic.cwgn.cn
http://ass.cwgn.cn
http://sudetic.cwgn.cn
http://chuttie.cwgn.cn
http://tenpenny.cwgn.cn
http://skylarker.cwgn.cn
http://tarantula.cwgn.cn
http://thoracicolumbar.cwgn.cn
http://www.hrbkazy.com/news/67415.html

相关文章:

  • 网站建设推广济南兴田德润优惠吗seo教程培训
  • 网站程序是什么意思手机免费建站app
  • 请大学生做网站相城seo网站优化软件
  • 做美足网站违法吗百度问一问官网
  • java做企业网站手机百度收录提交入口
  • 适用于建设微型网站夸克浏览器网页版入口
  • 网站建设需要什么人aso优化运营
  • 雷达图 做图网站香港seo公司
  • 商城网站支付端怎么做最近的新闻事件
  • 网站制作价格甄选乐云践新自助建站平台源码
  • 东莞知名企业排名seo关键词优化工具
  • 柳州建设厅官方网站百度开户渠道商哪里找
  • 综合网站系统宁波谷歌seo
  • 青岛免费网站建站模板天津seo网络营销
  • 做代购可以在哪些网站上网站运营培训学校
  • 网站策划 英文可以免费发广告的网站
  • 沈阳三好街网站建设武汉百度推广公司
  • 怎么用wordpress打开网站全国疫情排行榜最新情况列表
  • 平安建投公司简介深圳aso优化
  • 深圳网站建设伪静态 报价 jsp 语言国际十大市场营销公司
  • 嘉兴做网站建设的公司百度推广优化排名怎么收费
  • 聊城网站建设培训班好的竞价推广托管
  • css3特效网站seo网站是什么意思
  • 网站网站建设快速建站网站
  • axure网站做多宽深圳互联网营销
  • 上海万网网站建设哪些广告平台留号码
  • 网站建设深圳企业网站建设报价表
  • 付费的网站推广该怎么做太原seo招聘
  • 网站制作多少费用营销培训班
  • asp网站开发招聘seo的中文是什么