Three.js 加载3dtiles教程
加载3dtiles ·Load Tiles· ▶ 在线运行案例案例合集三维可视化功能案例threehub.cn开源仓库github地址https://github.com/z2586300277/three-cesium-examples400个案例代码:网盘链接你将学到什么OrbitControls 相机轨道交互glTF/Draco 模型加载与优化3D Tiles 流式 LOD 场景requestAnimationFrame渲染循环与resize自适应效果说明本案例演示加载3dtiles效果基于 WebGL 实现「加载3dtiles」可视化效果附完整可运行源码核心用到 OrbitControls、glTF/Draco、3D。建议先打开文首在线案例查看动态画面再对照下方源码逐步理解。核心概念Loader异步加载模型glTF 返回gltf.scene加载后注意scale与坐标系。Draco 需配置DRACOLoader。OrbitControls轨道旋转缩放开enableDamping时每帧需controls.update()。实现步骤搭建 Scene / Camera / Renderer 与 OrbitControlsLoader 异步加载模型/纹理资源rAF 循环中 update 并 render代码要点import * as THREE from threeimport { OrbitControls } from three/examples/jsm/controls/OrbitControls.js import { TilesRenderer } from 3d-tiles-rendererconst 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, 30, 30)const renderer new THREE.WebGLRenderer({ antialias: true, alpha: true, logarithmicDepthBuffer: true })renderer.setSize(box.clientWidth, box.clientHeight)box.appendChild(renderer.domElement)new OrbitControls(camera, renderer.domElement)scene.add(new THREE.AxesHelper(1000))// 加载3d tiles const tilesRenderer new TilesRenderer(FILE_HOST 3dtiles/test/tileset.json)tilesRenderer.setCamera(camera)tilesRenderer.setResolutionFromRenderer(camera, renderer)const model new THREE.Group().add(tilesRenderer.group)scene.add(model)const box3 new THREE.Box3()tilesRenderer.addEventListener(load-tile-set, () {if (tilesRenderer.getBoundingBox(box3)) {box3.getCenter(tilesRenderer.group.position)tilesRenderer.group.position.multiplyScalar(-1)}})animate()function animate() {requestAnimationFrame(animate)tilesRenderer.update()renderer.render(scene, camera)}// tilesRenderer.errorTarget 1 // 设置错误阈值默认值为0.5范围0~1值越小越严格// https://blog.csdn.net/m0_73348873/article/details/151783069/* function initTiles() { tilesRenderer new TilesRenderer(3dtiles路径/tileset.json); const gltfLoader new GLTFLoader(); // Draco const dracoLoader new DRACOLoader(); dracoLoader.setDecoderPath(https://unpkg.com/three0.180.0/examples/jsm/libs/draco/); gltfLoader.setDRACOLoader(dracoLoader); // KTX2 const ktx2Loader new KTX2Loader(); ktx2Loader.setTranscoderPath(https://unpkg.com/three0.180.0/examples/jsm/libs/basis/); ktx2Loader.detectSupport(renderer); gltfLoader.setKTX2Loader(ktx2Loader); tilesRenderer.manager.addHandler(/\.(gltf|glb)$/g, gltfLoader); tilesRenderer.setCamera(camera); tilesRenderer.setResolutionFromRenderer(camera, renderer); // 更新矩阵并设置相机位置 let loadedTileSetHandled false; tilesRenderer.addEventListener(load-tile-set, () { if (loadedTileSetHandled) return; loadedTileSetHandled true; const sphere new THREE.Sphere(); tilesRenderer.getBoundingSphere(sphere); const center sphere.center.clone(); // 获取包围球中心 const radius sphere.radius; // 获取包围球半径 controls.target.copy(center); // 把控制器目标设为包围球中心 const offset new THREE.Vector3(radius * 2, radius, 0); // 给相机一个偏移 camera.position.copy(center).add(offset); // 设置相机位置 const m (tilesRenderer as any).root.transform; // 获取原始矩阵 const rotationMat3 new THREE.Matrix3().set(m[0], m[1], m[2], m[4], m[5], m[6], m[8], m[9], m[10]); // 取出旋转部分 rotationMat3.transpose(); // 逆旋转 const rotationMat4 new THREE.Matrix4().setFromMatrix3(rotationMat3); // 转回Matrix4以便应用 const rotX90 new THREE.Matrix4().makeRotationX((90 * Math.PI) / 180); // x轴旋转90度矩阵 rotationMat4.multiply(rotX90); // 合并矩阵由z轴向上坐标系 转为 y轴向上坐标系 const translationMatrix1 new THREE.Matrix4().makeTranslation(center.x, center.y, center.z); // T(center) const translationMatrix2 new THREE.Matrix4().makeTranslation(-center.x, -center.y, -center.z); // T(-center) const finalMatrix new THREE.Matrix4().multiplyMatrices(translationMatrix1, rotationMat4).multiply(translationMatrix2); // 最终矩阵 T(center)R⁻¹T(-center) tilesRenderer.group.matrix.copy(finalMatrix); // 设置矩阵 tilesRenderer.group.matrixAutoUpdate false; // 禁止自动更新矩阵 tilesRenderer.group.updateMatrixWorld(true); // 更新矩阵 }); scene.add(tilesRenderer.group); // 添加到场景 } */完整源码GitHub小结本文提供加载3dtiles完整 Three.js 源码与在线 Demo建议先运行案例再改 uniform/参数做二次实验更多 Three.js 实战案例见 three-cesium-examples 合集 与 GitHub 开源仓库

相关新闻

基于multisim的函数信号发生器10-10KHz设计

基于multisim的函数信号发生器10-10KHz设计

利用集成运放、电阻、电容、二极管等元器件设计基本的函数信号发生器电路,要求输出方波-三角波-正弦波发生器。频率范围:10~100Hz,100Hz~1kHz,1kHz~10kHz;正弦波Vp-p≈3,三角波Vp-p≈5V,方波Vp-…

2026/7/3 6:23:44 阅读更多 →
医学AI数据基建:高质量临床影像数据集构建实战指南

医学AI数据基建:高质量临床影像数据集构建实战指南

1. 这不是又一个“AI看CT”的演示项目,而是一次临床数据基建的实操复盘“Contributing a New Large Dataset for SARS-CoV-2 Identification via CT Scan”——光看标题,很多人第一反应是:哦,又一个用深度学习识别新冠肺部CT影像的…

2026/7/3 6:23:44 阅读更多 →
Claude Fable 5 恢复访问:模型定位、refusal 机制、fallback 与接入核验指南

Claude Fable 5 恢复访问:模型定位、refusal 机制、fallback 与接入核验指南

Claude Fable 5 已恢复访问。对开发者来说,这次更新不只是“多了一个更强模型”,而是需要重新设计模型路由、成本预算、refusal 处理和 fallback 策略。1. 核心规格项目Claude Fable 5Model IDclaude-fable-5Context window1M tokensMax output128k toke…

2026/7/3 6:21:43 阅读更多 →

最新新闻

B站缓存视频转换工具终极指南:3步拯救你的珍贵视频收藏

B站缓存视频转换工具终极指南:3步拯救你的珍贵视频收藏

B站缓存视频转换工具终极指南:3步拯救你的珍贵视频收藏 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾为B站缓存视频无法在…

2026/7/3 7:36:03 阅读更多 →
机器学习生产化:从模型部署到可运维工程系统的实战指南

机器学习生产化:从模型部署到可运维工程系统的实战指南

1. 为什么“模型上线”不是终点,而是系统性风险的起点?你有没有经历过这样的场景:凌晨两点,手机突然震动,钉钉消息一条接一条弹出来——“风控决策延迟超时”“用户申请失败率飙升至32%”“实时反欺诈服务响应时间突破…

2026/7/3 7:34:02 阅读更多 →
仅限首批读者:ChatGPT CoT黄金提示库V2.1(含17个经A/B测试验证的思维链变体,失效率<1.2%)

仅限首批读者:ChatGPT CoT黄金提示库V2.1(含17个经A/B测试验证的思维链变体,失效率<1.2%)

更多请点击: https://codechina.net 第一章:ChatGPT思维链(CoT)的核心原理与演进脉络 思维链(Chain-of-Thought, CoT)并非ChatGPT原生内置的模块化功能,而是通过提示工程激发大语言模型显式生成…

2026/7/3 7:32:01 阅读更多 →
从零到CI/CD内嵌:ChatGPT生成单元测试,7步落地法,含可直接运行的Prompt工程+边界值校验脚本

从零到CI/CD内嵌:ChatGPT生成单元测试,7步落地法,含可直接运行的Prompt工程+边界值校验脚本

更多请点击: https://kaifayun.com 第一章:ChatGPT 生成 单元测试 代码 大型语言模型如 ChatGPT 已成为开发者编写单元测试的高效辅助工具,尤其适用于快速生成覆盖边界条件、异常路径和典型业务逻辑的测试用例。其优势在于理解自然语言描述的…

2026/7/3 7:30:00 阅读更多 →
3分钟上手:LyricsX让Mac桌面歌词显示变得如此简单

3分钟上手:LyricsX让Mac桌面歌词显示变得如此简单

3分钟上手:LyricsX让Mac桌面歌词显示变得如此简单 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics 还在为iTunes没有歌词显示功能而烦恼吗?LyricsX…

2026/7/3 7:27:59 阅读更多 →
GPT-SoVITS终极优化指南:如何在Mac上实现300%语音合成性能提升

GPT-SoVITS终极优化指南:如何在Mac上实现300%语音合成性能提升

GPT-SoVITS终极优化指南:如何在Mac上实现300%语音合成性能提升 【免费下载链接】GPT-SoVITS 1 min voice data can also be used to train a good TTS model! (few shot voice cloning) 项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS 你是否…

2026/7/3 7:25:59 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻