Three.js 魔幻山体教程

发布时间:2026/7/17 9:48:29

Three.js 魔幻山体教程
魔幻山体 ·Contour· ▶ 在线运行案例案例合集三维可视化功能案例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 three;import { OrbitControls } from three/examples/jsm/controls/OrbitControls.js; // 魔幻山体-等高线示意 const box document.getElementById(box); const scene new THREE.Scene(); scene.background new THREE.Color(0.5, 1, 0.875); scene.fog new THREE.Fog(scene.background, 20, 45); const camera new THREE.PerspectiveCamera( 75, box.clientWidth / box.clientHeight, 0.1, 1000, ); camera.position.set(0, 10, 10); const renderer new THREE.WebGLRenderer(); renderer.setSize(box.clientWidth, box.clientHeight); box.appendChild(renderer.domElement); new OrbitControls(camera, renderer.domElement); window.onresize () { renderer.setSize(box.clientWidth, box.clientHeight); camera.aspect box.clientWidth / box.clientHeight; camera.updateProjectionMatrix(); };animate(); function animate() { // uniforms.iTime.value 0.01 requestAnimationFrame(animate); renderer.render(scene, camera); }// 添加一个plane import { Clock, DoubleSide, Mesh, PlaneGeometry, ShaderMaterial } from three const add_plane () { const clock new Clock(); const planeGeometry new PlaneGeometry(50, 50, 500, 500); planeGeometry.rotateX(-Math.PI / 2) let uniforms { u_time: { value: clock.getDelta() } } // shader material const vertexShader vec3 hash(vec3 p) { p vec3( dot(p, vec3(127.1, 311.7, 74.7)), dot(p, vec3(269.5, 183.3, 246.1)), dot(p, vec3(113.5, 271.9, 124.6))); return fract(sin(p) * 43758.5453123); } // returns 3D value noise float noise( in vec3 x ) { // grid vec3 p floor(x); vec3 w fract(x); // quintic interpolant vec3 u www(w(w*6.0-15.0)10.0); // gradients vec3 ga hash( pvec3(0.0,0.0,0.0) ); vec3 gb hash( pvec3(1.0,0.0,0.0) ); vec3 gc hash( pvec3(0.0,1.0,0.0) ); vec3 gd hash( pvec3(1.0,1.0,0.0) ); vec3 ge hash( pvec3(0.0,0.0,1.0) ); vec3 gf hash( pvec3(1.0,0.0,1.0) ); vec3 gg hash( pvec3(0.0,1.0,1.0) ); vec3 gh hash( pvec3(1.0,1.0,1.0) ); // projections float va dot( ga, w-vec3(0.0,0.0,0.0) ); float vb dot( gb, w-vec3(1.0,0.0,0.0) ); float vc dot( gc, w-vec3(0.0,1.0,0.0) ); float vd dot( gd, w-vec3(1.0,1.0,0.0) ); float ve dot( ge, w-vec3(0.0,0.0,1.0) ); float vf dot( gf, w-vec3(1.0,0.0,1.0) ); float vg dot( gg, w-vec3(0.0,1.0,1.0) ); float vh dot( gh, w-vec3(1.0,1.0,1.0) ); // interpolation return va u.x*(vb-va) u.y*(vc-va) u.z*(ve-va) u.xu.y(va-vb-vcvd) u.yu.z(va-vc-vevg) u.zu.x(va-vb-vevf) u.xu.yu.z*(-vavbvc-vdve-vf-vgvh); } varying vec2 v_uv; varying float v_y; void main(){ v_uv uv; float noise_value noise(position); float y noise_value; y pow(y,3.); vec3 in_position position; in_position.y v_y min(y35.,15.)2.; gl_Position projectionMatrixmodelViewMatrixvec4( in_position, 1.0 ); }const fragmentShader uniform float u_time; varying float v_y; varying vec2 v_uv; void main(){ gl_FragColor vec4(v_uv.x,sin(v_y100.u_time),0.5,1.); }const shaderMaterial new ShaderMaterial({ vertexShader, fragmentShader, side: DoubleSide, uniforms }) function animate() { uniforms.u_time.value clock.getElapsedTime()*0.01; requestAnimationFrame(animate) } animate()const mesh new Mesh(planeGeometry, shaderMaterial) scene.add(mesh) return mesh; }add_plane()完整源码GitHub小结本文提供魔幻山体完整 Three.js 源码与在线 Demo建议先运行案例再改 uniform/参数做二次实验更多 Three.js 实战案例见 three-cesium-examples 合集 与 GitHub 开源仓库

相关新闻

HTTP Response中的CORS Headers

HTTP Response中的CORS Headers

2026/7/8 19:12:44

Access-Control-Allow-CredentialsAccess-Control-Allow-MethodsAccess-Control-Allow-OriginAccess-Control-Max-Age这四个都是 CORS(Cross-Origin Resource Sharing,跨域资源共享) 机制中的 HTTP Response Header,用来告诉浏览器…

机器人操作基准测试有效性诊断:Shortcut、统计显著性与过拟合三重验证

机器人操作基准测试有效性诊断:Shortcut、统计显著性与过拟合三重验证

2026/7/8 19:00:45

1. 项目概述:为什么机器人操作基准测试需要“有效性诊断”这把手术刀你有没有遇到过这样的情况:团队花三个月训练出一个抓取机械臂模型,在某套公开benchmark上准确率飙到98.5%,论文里画的曲线漂亮得像教科书;结果一拿到…

【创客匠人资讯分享】AI赋能知识付费:告别流量,深耕价值

【创客匠人资讯分享】AI赋能知识付费:告别流量,深耕价值

2026/7/8 14:44:09

历经数年发展,知识付费行业早已告别野蛮生长的流量红利期。早期依托短视频、图文课程的标准化售卖模式,逐渐暴露同质化严重、交付粗糙、用户留存偏低的短板。而2026年,生成式AI技术的深度落地,不再是简单为行业提供工具辅助&#…

Loud Links性能优化:如何避免音效延迟与资源加载问题

Loud Links性能优化:如何避免音效延迟与资源加载问题

2026/7/17 9:41:22

Loud Links性能优化:如何避免音效延迟与资源加载问题 【免费下载链接】loud-links :sound: A simple tiny Javascript library to add interaction sounds to your website. 项目地址: https://gitcode.com/gh_mirrors/lo/loud-links Loud Links是一款轻量级…

M1芯片安装Asahi Linux的性能优势与实战指南

M1芯片安装Asahi Linux的性能优势与实战指南

2026/7/17 9:41:22

1. 项目背景:M1芯片与Linux的奇妙碰撞 当苹果在2020年推出基于ARM架构的M1芯片时,整个计算机行业都为之震动。这颗5纳米工艺的芯片不仅在能效比上碾压同期x86处理器,其统一内存架构和强大的神经网络引擎更是为移动计算树立了新标杆。但随之而…

CPM4OSSP-SERVER监控告警配置:7步构建智能运维监控体系

CPM4OSSP-SERVER监控告警配置:7步构建智能运维监控体系

2026/7/17 9:41:22

CPM4OSSP-SERVER监控告警配置:7步构建智能运维监控体系 【免费下载链接】CPM4OSSP-SERVER The server of centralized management platform for operating system software package 项目地址: https://gitcode.com/openeuler/CPM4OSSP-SERVER 前往项目官网免…

WPS REGEXP函数实战:正则表达式在Excel文本处理中的高效应用

WPS REGEXP函数实战:正则表达式在Excel文本处理中的高效应用

2026/7/17 9:41:22

你有没有遇到过这种情况:拿到一份混乱的数据,里面中文、英文、数字全都混在一起,手动拆分不仅耗时耗力,还容易出错。比如从系统导出的用户信息字段,可能是“张三abc123李四456def”这样的格式,你需要分别提…

SQL-Eval结果分析:如何解读评估指标与性能报告

SQL-Eval结果分析:如何解读评估指标与性能报告

2026/7/17 9:41:22

SQL-Eval结果分析:如何解读评估指标与性能报告 【免费下载链接】sql-eval Evaluate the accuracy of LLM generated outputs 项目地址: https://gitcode.com/gh_mirrors/sq/sql-eval SQL-Eval是一个用于评估LLM生成SQL输出准确性的强大工具,它支持…

SOLID原则:写出好代码的五大准则

SOLID原则:写出好代码的五大准则

2026/7/17 9:31:22

540|SOLID原则:写出好代码的五大准则 你写过这样的代码吗? class User {validate() {... }save() {... }

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/16 0:35:09

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/16 14:29:31

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/16 14:18:17

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

Cursor终端插件生态避坑指南:23个实测低效插件黑名单,附3个自研轻量替代方案

Cursor终端插件生态避坑指南:23个实测低效插件黑名单,附3个自研轻量替代方案

2026/7/17 0:00:57

更多请点击: https://intelliparadigm.com 第一章:Cursor终端插件生态避坑指南概览 Cursor 作为基于 VS Code 内核构建的 AI 原生编辑器,其终端插件生态虽活跃,但存在兼容性断层、权限策略突变与调试链路断裂等典型风险。开发者常…

ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表)

ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表)

2026/7/17 0:00:57

更多请点击: https://codechina.net 第一章:ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表) 提示词工程已从经验试错迈入变量驱动的科学阶段。实证研究表明,影响…

DeepSeek V4替换Codex底座模型的实践与优化

DeepSeek V4替换Codex底座模型的实践与优化

2026/7/17 0:00:57

1. 为什么选择用DeepSeek V4替换Codex的底座模型去年我在开发一个智能代码补全工具时,发现Codex的默认底座模型在复杂业务逻辑场景下表现不尽如人意。经过多次测试对比,DeepSeek V4在以下几个关键指标上展现出明显优势:代码补全准确率&#x…