Three.js 柔光教程
📅 2026/7/9 17:32:28
👁️ 次浏览
柔光 ·Soft Light· ▶ 在线运行案例案例合集三维可视化功能案例threehub.cn开源仓库github地址https://github.com/z2586300277/three-cesium-examples400个案例代码:网盘链接你将学到什么ShaderMaterial 自定义着色器实现核心视觉效果OrbitControls 相机轨道交互requestAnimationFrame渲染循环与resize自适应效果说明本案例演示柔光效果基于 WebGL 实现「柔光」可视化效果附完整可运行源码核心用到 ShaderMaterial、OrbitControls。建议先打开文首在线案例查看动态画面再对照下方源码逐步理解。核心概念Scene / Camera / WebGLRenderer构成最小渲染闭环大场景可开logarithmicDepthBuffer缓解 Z-fighting。ShaderMaterial通过uniforms 自定义 GLSL 控制逐像素/逐点效果透明粒子常配合depthTest: false。OrbitControls提供轨道旋转/缩放开启enableDamping后需在 animate 中controls.update()。实现步骤搭建 Scene、PerspectiveCamera、WebGLRenderer挂载 canvas 并处理resize定义 uniforms / onBeforeCompile 或 ShaderMaterial编写 GLSL 与材质参数创建 OrbitControls及 Raycaster 等交互控件若源码包含在requestAnimationFrame循环中更新状态并 renderCesium 为viewer.render或自动渲染代码要点import * as THREE from threeimport { OrbitControls } from three/examples/jsm/controls/OrbitControls.jsconst box document.getElementById(box)const scene new THREE.Scene()const camera new THREE.PerspectiveCamera(75, box.clientWidth / box.clientHeight, 0.1, 1000)camera.position.set(0, 0, 1.5)const renderer new THREE.WebGLRenderer({ antialias: true, alpha: true, logarithmicDepthBuffer: true })renderer.setSize(box.clientWidth, box.clientHeight)box.appendChild(renderer.domElement)const controls new OrbitControls(camera, renderer.domElement)controls.enableDamping truewindow.onresize () {renderer.setSize(box.clientWidth, box.clientHeight)camera.aspect box.clientWidth / box.clientHeightcamera.updateProjectionMatrix()}const uniforms {iTime: {value: 0},iResolution: {value: new THREE.Vector2(box.clientWidth, box.clientHeight)}}const geometry new THREE.PlaneGeometry(3, 3)const material new THREE.ShaderMaterial({uniforms,transparent: true,side: THREE.DoubleSide,vertexShader:varying vec3 vPosition; varying vec2 vUv; void main() { vUv uv; vec4 mvPosition modelViewMatrix * vec4(position, 1.0); gl_Position projectionMatrix * mvPosition; }, fragmentShader:uniform float iTime; uniform vec2 iResolution; varying vec2 vUv;mat2 m(float a){float ccos(a), ssin(a);return mat2(c,-s,s,c);} float map(vec3 p){ p.xz m(iTime0.4);p.xy m(iTime0.3); vec3 q p*2.iTime; return length(pvec3(sin(iTime0.7)))log(length(p)1.) sin(q.xsin(q.zsin(q.y)))*0.5 - 1.; }void main(void) { vec2 p (vUv - 0.5) * 2.0 ; vec3 cl vec3(0.); float d 2.5; for(int i0; i5; i) { vec3 p vec3(0,0,5.) normalize(vec3(p, -1.))*d; float rz map(p); float f clamp((rz - map(p.1))*0.5, -.1, 1. ); vec3 l vec3(0.1,0.3,.4) vec3(5., 2.5, 3.)*f; cl cll smoothstep(2.5, .0, rz).7*l; d min(rz, 1.); } gl_FragColor vec4(cl, 1.); }})const mesh new THREE.Mesh(geometry, material)scene.add(mesh)animate()function animate() {uniforms.iTime.value 0.01requestAnimationFrame(animate)controls.update()renderer.render(scene, camera)}完整源码GitHub小结本文提供柔光完整 Three.js 源码与在线 Demo建议先运行案例再改 uniform/参数做二次实验更多 Three.js 实战案例见 three-cesium-examples 合集 与 GitHub 开源仓库
NOR/NAND Flash 文件系统选型指南:5 大场景与 8 款方案性能对比在嵌入式系统开发中,选择合适的闪存文件系统往往决定了产品的稳定性和性能上限。面对市场上琳琅满目的解决方案,工程师们常常陷入选择困难——是追求极致的读写速度,…
📅 2026/7/9 17:32:28
即时通讯源码如果只围绕“发送消息接口”组织代码,后期会很容易变重。
一开始只是文本、图片、文件、表情;继续往后,已读回执、消息撤回、收藏、朋友圈互动、红包状态、钱包流水、群成员变更、语音视频邀请、多人会议加入离开,都…
📅 2026/7/9 17:32:28
JDK 16 ZGC并发线程栈处理:如何实现亚毫秒级GC暂停的实战解析当你的Java应用需要处理每秒数十万次请求时,垃圾回收(GC)暂停带来的延迟可能成为系统瓶颈。JDK 16中的ZGC通过JEP 376引入的并发线程栈处理技术,将GC暂停时…
📅 2026/7/9 17:32:28
STM32 DS18B20 多点测温系统:1条总线挂载8个传感器与ROM搜索算法实现在工业自动化、农业温室监测、机房环境监控等场景中,分布式温度采集系统往往需要同时监测多个位置的温度数据。传统方案需要为每个传感器单独布线,不仅增加了硬件成本&…
📅 2026/7/9 23:27:32
1. 这不是又一个“AI编程工具测评”,而是我在真实项目里用 Cursor 撑过三个迭代周期后的手记Cursor 这个名字最近在开发者圈子里出现的频率,已经快赶上 Android Studio 启动时那个“Loading project…”的进度条了。我从 2023 年底开始把它作为主力 IDE …
📅 2026/7/9 23:27:32
Transformer 位置编码演进:从 Sinusoidal 到 RoPE 与 ALiBi 的 3 种方案对比在自然语言处理领域,Transformer 架构凭借其强大的并行计算能力和长距离依赖捕捉能力,迅速成为主流模型。然而,Transformer 的一个关键挑战是如何有效编…
📅 2026/7/9 23:27:32
1. DBA视角下的软件源:远不止“换几个URL”那么简单你有没有在凌晨三点被一个紧急告警叫醒,说生产库的备份脚本突然失败了?登录服务器一看,yum install rsync报错:“No package rsync available”,再一查/e…
📅 2026/7/9 23:27:32
我是一名在AI基础设施领域摸爬滚打十多年的实战派工程师,从2014年用GTX780跑第一个Caffe模型开始,就常年和CUDA驱动、系统内核、GCC版本、cuDNN兼容性这些“看不见的墙”打交道。Ubuntu 18.04 CUDA 10.1这套组合,是我带过的37个深度学习入门…
📅 2026/7/9 23:27:32
TVF-EMD与VMD:非平稳信号分解算法的深度对比与实战指南引言在机械振动监测、生物医学信号分析等领域,工程师们每天都要面对各种复杂的非平稳信号。这些信号往往包含着设备故障的早期征兆、人体生理状态的关键信息,但如何从噪声中提取出有价值…
📅 2026/7/9 23:26:32
掌握Docker多阶段构建镜像优化技巧在容器化技术日益普及的今天,Docker已成为开发与运维领域的基石工具。然而,随着应用复杂度提升,构建出的Docker镜像体积庞大、层数繁多、安全性欠佳等问题逐渐凸显,直接影响着部署效率、传输速度…
📅 2026/7/9 0:00:13
在当今快速迭代的IT运维与开发领域,自动化已成为提升效率、保障一致性的核心支柱。Ansible作为一款强大的IT自动化工具,以其无代理、简单易用的特点广受欢迎。而AWX,作为Ansible上游项目提供的企业级Web界面、API及任务引擎,则将A…
📅 2026/7/9 0:00:13
1. 项目概述:当动画成为性能瓶颈在Unity项目开发的中后期,尤其是涉及大规模场景、海量角色或复杂特效时,动画系统往往会成为性能的“阿喀琉斯之踵”。传统的骨骼动画(Skinned Mesh Renderer)虽然功能强大,但…
📅 2026/7/9 0:00:13
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/9 15:10:35
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/9 14:14:01
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/9 15:10:36
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/9 15:10:36
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/9 15:10:36
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/9 15:10:36