Three.js 灯罩教程
灯罩 ·Lampshade· ▶ 在线运行案例案例合集三维可视化功能案例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()。实现步骤创建 OrbitControls 并处理 resize定义 uniforms在 rAF 中更新并 render搭建灯光与环境如有requestAnimationFrame 循环 update render代码要点import {Color, CylinderGeometry, Group, Mesh, MeshBasicMaterial, MeshStandardMaterial, PerspectiveCamera, PlaneGeometry, PointLight, Scene, ShaderMaterial, SphereGeometry, WebGLRenderer } from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.jsconst size { width: window.innerWidth, height: window.innerHeight } const scene new Scene() scene.background new Color(#070630)const camera new PerspectiveCamera(45, size.width / size.height, 0.1, 1000) camera.position.set(30, 30, 30)const renderer new WebGLRenderer({ antialias: true }) renderer.setSize(size.width, size.height) renderer.setPixelRatio(window.devicePixelRatio) document.body.appendChild(renderer.domElement)const controls new OrbitControls(camera, renderer.domElement)class DeskLamp extends Group { constructor() { super() this.#createWick() this.#createLampshade() }/*灯芯/ #createWick() { const geometry new SphereGeometry(1, 32, 16, 0, Math.PI * 2, 0, Math.PI / 2) const material new MeshBasicMaterial({ color: 0xffffff }) const sphere new Mesh(geometry, material) sphere.position.set(0, 3, 0) this.#createLight(sphere) this.add(sphere) }/*灯罩/ #createLampshade() { const cylinderGeometry new CylinderGeometry(1, 5, 3, 32) const cylinderMaterial new ShaderMaterial({ transparent: true, uniforms: { color: { value: new Color(#CB00E3) } }, vertexShader:varying vec2 vUv; void main() { vUv uv; gl_Position projectionMatrixmodelViewMatrixvec4(position, 1.0); }, fragmentShader:uniform vec3 color; varying vec2 vUv; void main() { gl_FragColor vec4(color, vUv.y); }}) const cylinder new Mesh(cylinderGeometry, cylinderMaterial) cylinder.position.set(0, 1.7, 0) this.add(cylinder) }/*点光源/ #createLight(mesh) { const pointLight new PointLight(0xffffff, 1, 100) pointLight.power 1000 mesh.add(pointLight) } }const light1 new DeskLamp() light1.position.set(0, 10, 0) scene.add(light1)const light2 new DeskLamp() light2.position.set(10, 10, 0) scene.add(light2)const light3 new DeskLamp() light3.position.set(0, 10, 10) scene.add(light3)/**创建地面/ const planeGeometry new PlaneGeometry(100, 100) const planeMaterial new MeshStandardMaterial({ color: 0x999999, side: 2 }) const plane new Mesh(planeGeometry, planeMaterial) plane.rotation.x -Math.PI / 2 scene.add(plane)animate() function animate() {renderer.render(scene, camera) requestAnimationFrame(animate) }完整源码GitHub小结本文提供灯罩完整 Three.js 源码与在线 Demo建议先运行案例再改 uniform/参数做二次实验更多 Three.js 实战案例见 three-cesium-examples 合集 与 GitHub 开源仓库

相关新闻

如何5步完成中兴光猫配置解密:终极免费工具使用指南

如何5步完成中兴光猫配置解密:终极免费工具使用指南

如何5步完成中兴光猫配置解密:终极免费工具使用指南 【免费下载链接】ZET-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/ze/ZET-Optical-Network-Terminal-Decoder 中兴光猫配置解密工具是一款专为网络技术爱好者和初级网络…

2026/10/13 9:49:31 阅读更多 →
2026无水印短视频怎么下载,无水印短视频下载方法与工具教程

2026无水印短视频怎么下载,无水印短视频下载方法与工具教程

在日常个人素材整理、内容学习、自有作品备份的场景中,很多用户都需要获取无水印短视频素材。平台自带的保存功能大多会自动叠加水印,影响素材的存档和二次整理使用,因此靠谱的无水印短视频下载方法、适配多场景的无水印短视频下载工具&#…

2026/10/15 0:06:49 阅读更多 →
前端 ttf / woff2 字体资源完整优化方案

前端 ttf / woff2 字体资源完整优化方案

前端 ttf / woff2 字体资源完整优化方案一、核心基础认知 字体格式优先级 woff2 > woff > ttf > otf • woff2:压缩率最高(比ttf小40%~70%),现代浏览器全支持,生产首选 • ttf:无压缩,…

2026/10/11 2:16:48 阅读更多 →

最新新闻

SpringBoot双模版电商系统设计与实现

SpringBoot双模版电商系统设计与实现

1. 项目概述:双模版电商系统的技术实现 这个SpringBoot零食商城系统是一个典型的轻量级电商解决方案,最显著的特点是采用了模块化设计,同时支持零食商城和花店管理两种业务模式。我在实际部署测试中发现,系统通过配置开关即可切换…

2026/10/15 13:47:17 阅读更多 →
DeepSeek模型本地部署与推理避坑指南

DeepSeek模型本地部署与推理避坑指南

简介:本资源是一份面向AI从业者、技术管理者与高校研究者的DeepSeek大模型内部科普培训材料,系统解析国产高性能大模型的技术架构、能力边界与落地路径。PPTX格式的单文件课件(27.18MB)结构清晰,涵盖DeepSeek-V3&#…

2026/10/15 13:47:17 阅读更多 →
Jev 估值 75 亿美元后,微软火速反击:数据之战下 API 通道如何选?TaoToken 统一 Key 实测

Jev 估值 75 亿美元后,微软火速反击:数据之战下 API 通道如何选?TaoToken 统一 Key 实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 13:47:17 阅读更多 →
物流中转站选址规划与运营实操:从选址到成本控制的全流程指南

物流中转站选址规划与运营实操:从选址到成本控制的全流程指南

1. 物流中转站选址与规划的核心逻辑1.1 为什么中转站选址是生死攸关的第一步做物流这行十几年,我见过太多项目死在选址上。一个物流中转站建起来,土地成本、建设成本、设备投入加起来动辄几百万甚至上千万,一旦位置选错,后面怎么优…

2026/10/15 13:47:17 阅读更多 →
异常检测实战:从统计基线到自适应建模的分层方法

异常检测实战:从统计基线到自适应建模的分层方法

1. 这不是“找bug”,而是让机器学会识别“不对劲”的直觉你有没有过这种感觉:在一堆整齐划一的数据里,突然冒出一个格格不入的点——它数值大得离谱,位置偏得诡异,行为模式完全不像其他样本?比如某天服务器…

2026/10/15 13:47:17 阅读更多 →
ponytail:把终端命令变成可复用技能的高效自动化工具

ponytail:把终端命令变成可复用技能的高效自动化工具

ponytail。第一次在同事的终端里看到这个词,我还以为是某个桌面对弈壁纸的花名。直到他现场敲了两行命令,把原本我得翻半天历史记录、拼接七八条命令才能完成的日志分析,变成了问候式的一行pt log --path access.log --top 5,我才…

2026/10/15 13:46:16 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →