Three.js 围栏着色器教程
围栏着色器 ·Fence Shader· ▶ 在线运行案例案例合集三维可视化功能案例threehub.cn开源仓库github地址https://github.com/z2586300277/three-cesium-examples400个案例代码:网盘链接你将学到什么ShaderMaterial 自定义着色器实现核心视觉效果OrbitControls 相机轨道交互BufferGeometry 自定义顶点/索引数据requestAnimationFrame渲染循环与resize自适应效果说明本案例演示围栏着色器效果基于 WebGL 实现「围栏着色器」可视化效果附完整可运行源码核心用到 ShaderMaterial、OrbitControls、BufferGeometry。建议先打开文首在线案例查看动态画面再对照下方源码逐步理解。核心概念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, 40, 40)const renderer new THREE.WebGLRenderer()renderer.setSize(box.clientWidth, box.clientHeight)new OrbitControls(camera, renderer.domElement)window.onresize () {renderer.setSize(box.clientWidth, box.clientHeight)camera.aspect box.clientWidth / box.clientHeightcamera.updateProjectionMatrix() }box.appendChild(renderer.domElement)/顶点着色器/ const vertexs varying vec2 vUv; void main() { vec4 mvPosition modelViewMatrix * vec4( position, 1.0 ); vUv uv; gl_Position projectionMatrixmodelViewMatrixvec4(position, 1.0); }/片元着色器/ const fragments uniform float time; uniform float opacity; uniform vec3 color; uniform float num; uniform float hiz; varying vec2 vUv; void main() { vec4 fragColor vec4(0.); float sin sin((vUv.y - timehiz)10. * num); float high 0.92; float medium 0.4; if (sin high) { fragColor vec4(mix(vec3(.8, 1., 1.), color, (1. - sin) / (1. - high)), 1.); } else if(sin medium) { fragColor vec4(color, mix(1., 0., 1.-(sin - medium) / (high - medium))); } else { fragColor vec4(color, 0.); } vec3 fade mix(color, vec3(0., 0., 0.), vUv.y); fragColor mix(fragColor, vec4(fade, 1.), 0.85); gl_FragColor vec4(fragColor.rgb, fragColor.aopacity(1. - vUv.y)); }// 自定义材质 const material new THREE.ShaderMaterial({ uniforms: { time: { type: pv2, value: 0, }, color: { type: uvs, value: new THREE.Color(#FF4127), }, opacity: { type: pv2, value: 1.0, }, num: { type: pv2, value: 10, }, hiz: { type: pv2, value: 0.03, }, }, vertexShader: vertexs, fragmentShader: fragments, blending: THREE.AdditiveBlending, transparent: !0, depthWrite: !1, depthTest: !0, side: THREE.DoubleSide, });let c [0,0, 10, 0, 10, 10, 0, 10, 0, 0]let posArr [];let uvrr [];let h 10; //围墙拉伸高度for (let i 0; i c.length - 2; i 2) {// 矩形的三角形1 posArr.push(c[i], c[i 1], 0, c[i 2], c[i 3], 0, c[i 2], c[i 3], h);// 矩形的三角形2 posArr.push(c[i], c[i 1], 0, c[i 2], c[i 3], h, c[i], c[i 1], h);// 注意顺序问题和顶点位置坐标对应 uvrr.push(0, 0, 1, 0, 1, 1);uvrr.push(0, 0, 1, 1, 0, 1);}const geometry new THREE.BufferGeometry(); //声明一个空几何体对象// 设置几何体attributes属性的位置position属性 geometry.attributes.position new THREE.BufferAttribute(new Float32Array(posArr), 3);// 设置几何体attributes属性的位置uv属性 geometry.attributes.uv new THREE.BufferAttribute(new Float32Array(uvrr), 2);geometry.computeVertexNormals()const mesh new THREE.Mesh(geometry, material) //网格模型对象Meshscene.add(mesh)function animate() {requestAnimationFrame(animate)mesh.rotation.x 0.01mesh.rotation.y 0.01material.uniforms.time.value 0.03renderer.render(scene, camera)}animate()完整源码GitHub小结本文提供围栏着色器完整 Three.js 源码与在线 Demo建议先运行案例再改 uniform/参数做二次实验更多 Three.js 实战案例见 three-cesium-examples 合集 与 GitHub 开源仓库

相关新闻

UE5像素流送技术:从原理到部署,实现云端实时渲染应用分发

UE5像素流送技术:从原理到部署,实现云端实时渲染应用分发

1. 项目概述:为什么像素流送是UE5应用分发的新范式?最近在折腾一个UE5的演示项目,想把一个接近10个G、包含高精度模型和复杂交互的虚拟展厅,让客户在手机、平板甚至低配电脑上都能流畅体验。直接打包分发?光是下载安装…

2026/10/17 18:39:32 阅读更多 →
3步拯救你的B站缓存视频:m4s-converter让珍贵内容永不消失

3步拯救你的B站缓存视频:m4s-converter让珍贵内容永不消失

3步拯救你的B站缓存视频:m4s-converter让珍贵内容永不消失 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的情…

2026/10/16 7:18:59 阅读更多 →
P1530 分数化小数 Fractions to Decimals【洛谷算法习题】

P1530 分数化小数 Fractions to Decimals【洛谷算法习题】

P1530 分数化小数 Fractions to Decimals 网页链接 P1530 分数化小数 Fractions to Decimals 题目描述 写一个程序,输入一个形如 ND\dfrac{N}{D}DN​ 的分数,输出它的小数形式。如果小数有循环节的话,把循环节放在一对圆括号中。 例如&…

2026/10/16 5:06:07 阅读更多 →

最新新闻

编码Agent搬出编辑器:本地优先工作台实战解析

编码Agent搬出编辑器:本地优先工作台实战解析

最近和几个做后端的朋友聊到编码Agent,发现大家的关注点已经变了。早几个月还在讨论怎么让Cursor多补点代码,现在讨论的问题变成了:“Agent能不能别老挂在编辑器里?”再往下聊,就绕不开一个词:本地优先工作…

2026/10/17 20:28:33 阅读更多 →
DeepSeek Harness插件从入门到实践:安装配置与开发全攻略

DeepSeek Harness插件从入门到实践:安装配置与开发全攻略

1. 插件机制为什么是DeepSeek Harness绕不开的一环先聊点实际的。我刚接触DeepSeek Harness那会儿,以为它就是一个能跑本地大模型的命令行工具,装好、拉模型、开聊,完事。后来越用越发现不对劲:这玩意儿真正的价值不在那个聊天窗口…

2026/10/17 20:28:33 阅读更多 →
物理约束神经网络:让深度学习真正学会能量守恒

物理约束神经网络:让深度学习真正学会能量守恒

打开高中物理课本,最扎眼的一页永远是能量守恒定律的推导公式。造物主似乎给整个宇宙提前写好了结算规则,无论中间的过程多混乱,起因和结果的账目永远对得上。但如果你把这套规则丢给现代神经网络,情况就尴尬了。一个卷积网络可以…

2026/10/17 20:28:33 阅读更多 →
CentOS 7 LVM实战:从原理到扩容缩容,一文搞定磁盘管理

CentOS 7 LVM实战:从原理到扩容缩容,一文搞定磁盘管理

搞Linux运维的人应该都有这种体验:CentOS 7安装器默认就会用LVM分区,装系统的时候一路下一步,等到服务器跑了两三年,根分区被日志和容器镜像撑满了才反应过来——当初如果不懂LVM,扩容只能靠重装系统,或者多…

2026/10/17 20:28:33 阅读更多 →
GoC图形化编程:用C语言绘图API快速验证算法与教学

GoC图形化编程:用C语言绘图API快速验证算法与教学

简介:这份PPT资源面向希望系统了解Go语言与C语言编程的开发者与学习者,以读书笔记形式梳理《走进GoC的编程世界》的核心内容,帮助读者快速把握两种语言的语法基础、编程思想及混合编程要点。资源包内含1个pptx文件,整体约2.34MB&a…

2026/10/17 20:28:33 阅读更多 →
Java客户端连接HBase实战:从依赖配置到生产调优与排坑指南

Java客户端连接HBase实战:从依赖配置到生产调优与排坑指南

接手过数据平台项目的同行应该都有体会:业务方丢过来一个需求,说“把HBase里的用户行为数据实时同步到我们的Java服务里”,听起来挺简单,但真到自己动手用Java客户端去连HBase的时候,坑比想象中多得多。我早期做这块时…

2026/10/17 20:27:33 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →