Three.js 旋转的圆教程
旋转的圆 ·Circle Rotate· ▶ 在线运行案例案例合集三维可视化功能案例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(1, 1)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 iMouse; varying vec2 vUv;#define PI 3.1415926 #define NUM 20. #define PALETTE vec3(.0, 1.4, 2.)1.5#define COLORED #define MIRROR //#define ROTATE #define ROT_OFST #define TRIANGLE_NOISE//#define SHOW_TRIANGLE_NOISE_ONLYmat2 mm2(in float a){float c cos(a), s sin(a);return mat2(c,-s,s,c);} float tri(in float x){return abs(fract(x)-.5);} vec2 tri2(in vec2 p){return vec2(tri(p.xtri(p.y2.)),tri(p.ytri(p.x2.)));} mat2 m2 mat2( 0.970, 0.242, -0.242, 0.970 );float triangleNoise(in vec2 p) { float z1.5; float z21.5; float rz 0.; vec2 bp p; for (float i0.; i3.; i ) { vec2 dg tri2(bp2.).8; dg mm2(iTime.3); p dg/z2;bp * 1.6; z2 * .6; z * 1.8; p * 1.2; p* m2; rz (tri(p.xtri(p.y)))/z; } return rz; } void main(void) { float time iTime* 1.2; float aspect iResolution.x/iResolution.y; float w 50./sqrt(iResolution.x*aspectiResolution.y);vec2 p (vUv -0.5) * 2.0 ; p.x * aspect; p* 1.05; vec2 bp p; #ifdef ROTATE p mm2(time.25); #endif float lp length(p); float id floor(lp*NUM.5)/NUM; #ifdef ROT_OFST p mm2(id11.); #endif #ifdef MIRROR p.y abs(p.y); #endif //polar coords vec2 plr vec2(lp, atan(p.y, p.x)); //Draw concentric circles float rz 1.-pow(abs(sin(plr.xPINUM))*1.25/pow(w,0.25),2.5); //get the current arc length for a given id float enp plr.ysin((timeid5.5))1.52-1.5; rz * smoothstep(0., 0.05, enp); //smooth out both sides of the arcs (and clamp the number) rz smoothstep(0.,.022w/plr.x, enp)*step(id,1.); #ifndef MIRROR rz smoothstep(-0.01,.02w/plr.x,PI-plr.y); #endif #ifdef TRIANGLE_NOISE rz (triangleNoise(p/(ww))*0.90.4); vec3 col (sin(PALETTEid5.time)0.50.5)*rz; col smoothstep(.4,1.,rz)*0.15; col * smoothstep(.2,1.,rz)1.; #else vec3 col (sin(PALETTEid5.time)0.50.5)*rz; col smoothstep(.8,1.15,rz).7.8; #endif #ifndef COLORED col vec3(dot(col,vec3(.7))); #endif #ifdef SHOW_TRIANGLE_NOISE_ONLY col vec3(triangleNoise(bp)); #endif// 剔除黑色 if (col.r 0.1 col.g 0.1 col.b 0.1) { discard; } gl_FragColor vec4(col,1.0); }})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 开源仓库

相关新闻

G-Helper终极指南:如何用免费开源工具替代Armoury Crate掌控华硕笔记本性能

G-Helper终极指南:如何用免费开源工具替代Armoury Crate掌控华硕笔记本性能

G-Helper终极指南:如何用免费开源工具替代Armoury Crate掌控华硕笔记本性能 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, V…

2026/7/5 21:33:18阅读更多 →
百度网盘秒传脚本终极指南:5分钟掌握永久分享黑科技

百度网盘秒传脚本终极指南:5分钟掌握永久分享黑科技

百度网盘秒传脚本终极指南:5分钟掌握永久分享黑科技 【免费下载链接】rapid-upload-userscript-doc 秒传链接提取脚本 - 文档&教程 项目地址: https://gitcode.com/gh_mirrors/ra/rapid-upload-userscript-doc 你是否厌倦了百度网盘链接频繁失效的烦恼&a…

2026/7/5 21:33:18阅读更多 →
PiC-BNN:端到端二进制神经网络加速器设计与实现

PiC-BNN:端到端二进制神经网络加速器设计与实现

1. PiC-BNN:基于CAM的端到端二进制神经网络加速器解析 在边缘计算和物联网设备中,神经网络的高效部署一直面临计算资源和能耗的严峻挑战。传统神经网络需要大量的浮点运算和内存带宽,这在资源受限的设备上难以实现。二进制神经网络&#xff0…

2026/7/5 21:33:18阅读更多 →
WSL2 挂载 SMB 网络共享:3种方案对比与 2 个常见报错解决

WSL2 挂载 SMB 网络共享:3种方案对比与 2 个常见报错解决

WSL2 挂载 SMB 网络共享:3种方案对比与 2 个常见报错解决 对于在 Windows Subsystem for Linux 2 (WSL2) 环境下开发的用户来说,访问局域网内的共享文件夹或 NAS 存储是一个常见需求。本文将深入分析三种主流挂载方案的技术细节,并提供两个高…

2026/7/6 1:53:46阅读更多 →
SPSS 与 R 协同 PSM 分析:突破 1:1 限制实现 1:N 匹配的 4 步流程

SPSS 与 R 协同 PSM 分析:突破 1:1 限制实现 1:N 匹配的 4 步流程

SPSS 与 R 协同 PSM 分析:突破 1:1 限制实现 1:N 匹配的 4 步流程1. 理解 PSM 的核心逻辑与跨平台协作价值倾向性评分匹配(Propensity Score Matching, PSM)作为观察性研究中平衡混杂变量的黄金标准,其本质是通过构建一个"虚…

2026/7/6 1:53:46阅读更多 →
MySQL 8.0 Join 算法演进:Hash Join 对比 BNLJ 在 1亿 数据量下的性能跃迁

MySQL 8.0 Join 算法演进:Hash Join 对比 BNLJ 在 1亿 数据量下的性能跃迁

MySQL 8.0 Join 算法演进:Hash Join 对比 BNLJ 在 1亿数据量下的性能跃迁当数据规模突破1亿行时,数据库表连接操作的性能直接决定了业务系统的响应能力。MySQL 8.0引入的Hash Join算法与传统Block Nested-Loop Join(BNLJ)之间究竟…

2026/7/6 1:53:46阅读更多 →
MySQL Join 算法实战:从 10万 行数据实测看 INLJ、BNLJ 与 BKA 性能差异

MySQL Join 算法实战:从 10万 行数据实测看 INLJ、BNLJ 与 BKA 性能差异

MySQL Join 算法性能对决:10万行数据实测与深度调优指南引言在数据库查询优化领域,Join操作堪称性能优化的"分水岭"。当数据量突破10万行门槛时,不同Join算法的性能差异可能达到数量级之别。本文将通过实际测试数据,揭示…

2026/7/6 1:53:46阅读更多 →
SAP CKM3 成本组件分割价格取数:3个核心表CKMLHD/CKMLPRKEPH/CKMLPRKEKO关联逻辑详解

SAP CKM3 成本组件分割价格取数:3个核心表CKMLHD/CKMLPRKEPH/CKMLPRKEKO关联逻辑详解

SAP CKM3成本组件分割价格取数:核心表关联逻辑与实战解析 在SAP产品成本控制模块中,CKM3事务码作为物料成本分析的核心工具,其底层数据架构与取数逻辑直接影响成本分析的准确性与效率。本文将深入剖析CKMLHD、CKMLPRKEPH、CKMLPRKEKO三张关键…

2026/7/6 1:53:46阅读更多 →
高并发秒杀三大核心技术实战

高并发秒杀三大核心技术实战

在构建高并发秒杀系统时,确保系统在高流量冲击下仍能保持高性能、高可用和数据一致性是核心目标。经过对业界主流方案的梳理,可以提炼出三大核心技术支柱:原子性库存扣减、分布式锁防超卖、以及异步消息队列解耦。下面将结合具体技术实现和实…

2026/7/6 1:48:45阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/6 0:10:35阅读更多 →
Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 技术架构先行:官方接口的合规应用 你是否曾在BP阶段手忙脚乱&#x…

2026/7/6 0:03:39阅读更多 →
多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_m…

2026/7/6 0:03:39阅读更多 →
COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南在数据分析和处理领域,去重统计是最基础也是最频繁使用的操作之一。当数据量达到亿级规模时,不同的去重统计方法在性能上可能产生天壤之别。本文将基于 5 亿行数据的实…

2026/7/6 0:03:39阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/5 1:30:27阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/5 3:48:10阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/5 3:48:09阅读更多 →