Three.js 海面教程 海面 ·Ocean Shader· ▶ 在线运行案例案例合集三维可视化功能案例threehub.cn开源仓库github地址https://github.com/z2586300277/three-cesium-examples400个案例代码:网盘链接你将学到什么官方Water对象examples/jsm/objects/Water.jswaterNormals法线贴图 RepeatWrappinguniforms.time驱动波浪lil-gui 调waterColor / sunColor / sunDirection效果说明万级平面海面荡漾天空盒反射GLTF 挖掘机模型设envMap与环境一致GUI 实时改水体与太阳参数。核心概念import { Water } from three/examples/jsm/objects/Water.js;const water new Water(waterGeometry, { textureWidth: 512, textureHeight: 512, waterNormals: new THREE.TextureLoader().load(waternormals.jpg, t { t.wrapS t.wrapT THREE.RepeatWrapping; }), sunDirection: new THREE.Vector3(), sunColor: 0xffffff, waterColor: 0x001e0f, distortionScale: 3.7, fog: scene.fog ! undefined, }); water.rotation.x -Math.PI / 2;动画water.material.uniforms[time].value 1.0 / 60.0;每帧递增timeWater 内部 shader 算法线偏移与反射。GUIgui.addColor(water.material.uniforms[waterColor], value);gui.add(water.material.uniforms[sunDirection].value, x, -1, 1);实现步骤PlaneGeometry 10000×10000 创建 WaterCubeTexture 天空盒 → background 模型 envMapGLTFLoader 加载场景模型animate 更新 time controls render代码要点import * as THREE from threeimport { OrbitControls } from three/examples/jsm/controls/OrbitControls.js import { Water } from three/examples/jsm/objects/Water.js; import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js import { GLTFLoader } from three/examples/jsm/loaders/GLTFLoader.jsconst box document.getElementById(box)const scene new THREE.Scene()const camera new THREE.PerspectiveCamera(50, box.clientWidth / box.clientHeight, 0.1, 1000000)camera.position.set(6, 3, 15)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 trueconst waterGeometry new THREE.PlaneGeometry(10000, 10000);const water new Water( waterGeometry, { textureWidth: 512, textureHeight: 512, waterNormals: new THREE.TextureLoader().load( FILE_HOST /images/texture/waternormals.jpg, function (texture) { texture.wrapS texture.wrapT THREE.RepeatWrapping;}), sunDirection: new THREE.Vector3(), sunColor: 0xffffff, waterColor: 0x001e0f, distortionScale: 3.7, fog: scene.fog ! undefined } );water.rotation.x - Math.PI / 2;scene.add(water);// 文件地址 const urls [0, 1, 2, 3, 4, 5].map(k (FILE_HOST files/sky/skyBox0/ (k 1) .png));const textureCube new THREE.CubeTextureLoader().load(urls);scene.background textureCube;new GLTFLoader().load(https://z2586300277.github.io/3d-file-server/models/glb/wajueji.glb,gltf {gltf.scene.traverse(child {if (child.isMesh) {child.material.envMap textureCube}})scene.add(gltf.scene)})const gui new GUI();gui.addColor(water.material.uniforms[waterColor], value).name(waterColor);gui.addColor(water.material.uniforms[sunColor], value).name(sunColor);gui.add(water.material.uniforms[sunDirection].value, x, - 1, 1).name(sunX);animate()function animate() {water.material.uniforms[time].value 1.0 / 60.0;requestAnimationFrame(animate)controls.update()renderer.render(scene, camera)}window.onresize () {renderer.setSize(box.clientWidth, box.clientHeight)camera.aspect box.clientWidth / box.clientHeightcamera.updateProjectionMatrix()}完整源码GitHub小结本文提供海面完整 Three.js 源码与在线 Demo建议先运行案例再改 uniform/参数做二次实验更多 Three.js 实战案例见 three-cesium-examples 合集 与 GitHub 开源仓库

相关新闻

最新新闻

【关注可白嫖源码】--课程设计--毕业设计--springboot导盲眼镜管理系统[编号:project54336](案件分析)

【关注可白嫖源码】--课程设计--毕业设计--springboot导盲眼镜管理系统[编号:project54336](案件分析)

本文仅展示核心实现逻辑与部分代码片段,完整项目源码、配套文档、数据库脚本内容较多,篇幅有限无法全部放出。 有需要完整资源的同学,可以在评论区留言【资料或领源码】,我会一 一回复站内私信,发送完整文件 摘 要 视…

2026/8/29 7:21:20
不定积分也能用代数方法解?待定系数法与SymPy验证实战

不定积分也能用代数方法解?待定系数法与SymPy验证实战

从高等数学到考研数学,几乎每个人都会在不定积分上花掉大量时间。换元法、分部积分法、三角恒等变换、有理函数分解……技巧多到让人眼花缭乱。更麻烦的是,很多积分题并不直接告诉你该用哪种技巧,你只能靠“多做题形成手感”来猜。如果有一种…

2026/8/29 7:21:20
用C语言打破Python可视化部署性能瓶颈

用C语言打破Python可视化部署性能瓶颈

标题里出现“Python可视化部署天花板”和“纯c语言”的时候,很多人第一反应是标题党。但我把“Python可视化”“部署”“C语言”这三个词拆开再组合之后发现,这个方向其实非常实际:Python负责画图和分析,C语言负责底层计算和性能热…

2026/8/29 7:21:20
LIS2HH12三轴加速度计应用笔记:从选型到低功耗设计

LIS2HH12三轴加速度计应用笔记:从选型到低功耗设计

做电池供电的工业监测节点,最头疼的不是MCU选型,而是传感器的功耗和体积。这颗LIS2HH12是我在多个项目里反复用过的三轴加速度计,意法半导体出品,2x2x1mm的LGA-12封装,官方定位叫“pico”级加速度计,数字输…

2026/8/29 7:21:20
蓝桥杯“本质上升序列”题解:动态规划与去重技巧详解

蓝桥杯“本质上升序列”题解:动态规划与去重技巧详解

1. 问题引入:从一个看似简单的字符串计数问题说起最近在复盘蓝桥杯国赛的真题,翻到了C B组的这道“本质上升序列”。题目名字听起来有点唬人,什么“本质上升”,乍一看像是动态规划或者字符串处理的变种。很多同学第一次看到这个题…

2026/8/29 7:21:20
第28篇-Live-Canvas

第28篇-Live-Canvas

【OpenClaw 从入门到精通】第 28 篇:Live Canvas — Agent 驱动的可视化工作空间 本系列定位:零基础入门,从安装配置到高级架构全覆盖。 本篇你将学到 Canvas 是什么Canvas 与 A2UI 概念创建第一个 CanvasCanvas 的展示平台 一、Canvas 概念…

2026/8/29 7:16:20