如何用Mapbox GL JS打造3D城市建筑:fill-extrusion与GLTF建筑模型完整实践
如何用Mapbox GL JS打造3D城市建筑fill-extrusion与GLTF建筑模型完整实践【免费下载链接】mapbox-gl-jsInteractive, thoroughly customizable maps in the browser, powered by vector tiles and WebGL项目地址: https://gitcode.com/gh_mirrors/ma/mapbox-gl-jsMapbox GL JS 是一款基于 WebGL 和矢量瓦片的高性能浏览器地图引擎它提供了两种打造 3D 城市建筑的核心能力fill-extrusion多边形拉伸建筑和model图层GLTF 三维模型。本文将带你用最少的代码快速掌握这两条 3D 城市建筑技术路线并教你通过灯光、阴影、夜景模式让城市立起来 ️两种3D建筑路线选哪条路线数据源适合场景fill-extrusion拉伸层矢量瓦片中的 building 图层含 height 属性城市级批量建筑、按数据着色、轻量通用model模型层GLTF/GLB 三维模型建筑、地标、树木地标建筑精细建模、品牌建筑、景观植被简单说批量城市肌理用 fill-extrusion精细地标和植被用 GLTF 模型。两者可以叠加使用互不冲突。fill-extrusion 快速上手四行配置立起城市fill-extrusion图层把矢量瓦片里的建筑多边形按高度值拉伸成 3D 体块。核心就四个属性map.addLayer({ id: 3d-buildings, type: fill-extrusion, source: composite, source-layer: building, minzoom: 15, paint: { fill-extrusion-color: white, fill-extrusion-height: [get, height], fill-extrusion-base: [get, min_height], fill-extrusion-opacity: 0.7 } });fill-extrusion-height建筑顶部高度单位米可绑定数据字段详见样式规范 src/style-spec/reference/v8.jsonfill-extrusion-base建筑底部高度可让建筑悬空或贴合地形minzoom: 15只在放大到一定程度时显示兼顾性能与体验仓库里可直接参考的完整示例是 debug/buildings.html它还演示了fill-extrusion-edge-radius圆角边缘、环境光遮蔽AO等进阶质感属性。调出真实城市感数据驱动颜色与灯光想让建筑不只是白色盒子把颜色改成数据驱动表达式即可——例如按建筑 ID 生成不同色相的 HSL 值整座城市立刻五彩斑斓。仓库示例 debug/buildings.html 中用random表达式为每栋楼生成随机色相效果非常出彩。配合倾斜视角pitch和自定义光源3D 城市才有光感map.setPitch(60)倾斜相机建筑立面才能被看见fill-extrusion-ambient-occlusion-intensity环境光遮蔽强度模拟楼角阴影fill-extrusion-vertical-gradient默认开启的立面垂直渐变让墙面下方略暗夜景模式同样只是换个配色方案深色建筑体 冷色路面城市灯光氛围一步到位。GLTF建筑模型model图层的完整配置当需要精细的建筑外观比如带幕墙、logo 的地标楼就轮到model图层登场了。配置分两步第一步在样式顶层注册模型资源models: { bmw-hq: https://你的域名/bmw-hq.glb, tree: https://你的域名/tree.glb }第二步添加 model 图层{ id: landmark, type: model, source: geojson-源, layout: { model-id: bmw-hq }, paint: { model-scale: [1, 1, 1], model-rotation: [0, 0, 45], model-color: #ffffff, model-opacity: 1 } }常用model-*属性一览完整定义见 src/style-spec/reference/v8.jsonmodel-id引用样式中注册好的模型model-scale/model-rotation/model-translation缩放、旋转、平移均可用表达式按 zoom 或数据驱动model-colormodel-color-mix-intensity给模型整体染色并可控制与原材质的混合强度model-emissive-strength自发光强度让地标在夜景中发光仓库中 debug/model.html 展示了树木模型叠加在拉伸建筑之上的完整配置包含model-rotation按数据匹配、model-scale随缩放级别指数增长等实用技巧。阴影与树木让城市更有生命给地图加上方向光和阴影后建筑会在地面投出长长的影子树木错落有致——城市瞬间有了呼吸感 仓库的集成测试 buildings-trees-shadows-casting 展示了 fill-extrusion 建筑 GLTF 树木 动态阴影的组合效果。实现上依赖 3d-style/render/shadow_renderer.ts 的阴影渲染管线配合setLights设置光源方向即可开启castShadows。性能优化与常见问题清单控制出现时机给 fill-extrusion 层设置minzoom避免低级别渲染海量建筑体高度动画技巧做缩放时建筑长高效果时优先用fill-extrusion-vertical-scale而非直接改 heightsymbol 锚定屋顶等功能要求 height 不随 zoom 变化模型数量GLTF 模型面数越高越吃 GPU大规模植被建议用低模 model-scale放大地形贴合实验性属性fill-extrusion-height-alignment: terrain可让建筑随坡地倾斜裁剪控制近距离建筑会被 front-cutoff 机制淡出裁剪相关渲染逻辑见 3d-style/render/draw_building.ts 与着色器 fill_extrusion_depth.fragment.glsl关键文件导航文件说明debug/buildings.htmlfill-extrusion 建筑 圆角 AO 完整示例debug/model.htmlmodel 图层 GLTF 树木模型示例debug/procedural-buildings.html3D 建筑/立面/地标开关与阳光控制演示src/style-spec/reference/v8.jsonfill-extrusion 与 model 属性完整定义3d-style/shaders/fill_extrusion_depth.vertex.glsl建筑拉伸与深度着色器3d-style/source/model_loader.tsGLTF 模型加载器test/integration/render-tests/model-layer/模型图层各类渲染测试图集掌握fill-extrusion与model图层这两块拼图再叠加灯光、阴影与数据驱动样式你就能用 Mapbox GL JS 在浏览器里搭建出从城市天际线到地标精模的完整 3D 世界 ️【免费下载链接】mapbox-gl-jsInteractive, thoroughly customizable maps in the browser, powered by vector tiles and WebGL项目地址: https://gitcode.com/gh_mirrors/ma/mapbox-gl-js创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

π型滤波电路设计实战:RC与LC选型关键逻辑

π型滤波电路设计实战:RC与LC选型关键逻辑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 15:27:57 阅读更多 →
Kettle数据清洗与迁移实战:从安装部署到ETL转换全流程

Kettle数据清洗与迁移实战:从安装部署到ETL转换全流程

数据清洗和迁移这件事,干过的人都知道,最耗时间的往往不是写SQL,而是把散落在Excel、CSV、各种数据库里的数据归拢到一处。Kettle(现在官方叫Pentaho Data Integration,但圈里人还是习惯叫Kettle)就是干这个…

2026/9/19 5:31:28 阅读更多 →
React Native动画性能优化:Reanimated 3与Gesture Handler实战指南

React Native动画性能优化:Reanimated 3与Gesture Handler实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 7:02:16 阅读更多 →

最新新闻

grok-build / xai-grok-shell 0.2.10 变更解读:`/check-work` 命令迁移与小于 8×8 像素图片的拒绝策略

grok-build / xai-grok-shell 0.2.10 变更解读:`/check-work` 命令迁移与小于 8×8 像素图片的拒绝策略

grok-build / xai-grok-shell 0.2.10 变更解读:/check-work 命令迁移与小于 88 像素图片的拒绝策略 【免费下载链接】grok-build SpaceXAIs coding agent harness and TUI. Fullscreen, mouse interactive, extensible. 项目地址: https://gitcode.com/gh_mirrors…

2026/9/20 16:01:36 阅读更多 →
如何用Semantica做本体建模?从实体关系数据到Turtle导出的实操指南

如何用Semantica做本体建模?从实体关系数据到Turtle导出的实操指南

如何用Semantica做本体建模?从实体关系数据到Turtle导出的实操指南 【免费下载链接】semantica Graph-Native Infrastructure for Context and Accountable AI Systems 项目地址: https://gitcode.com/GitHub_Trending/sema/semantica 没有本体的知识图谱&am…

2026/9/20 16:01:36 阅读更多 →
低频功率放大器DIY全攻略:从LM1875选型到电源接地调试

低频功率放大器DIY全攻略:从LM1875选型到电源接地调试

简介:一份围绕低频功率放大器设计的完整赛题资料,适合电子设计竞赛参赛者、课程设计学生及功率放大电路爱好者参考。内容从任务说明、技术指标到设计思路均有覆盖,明确给出额定输出功率≥10W、带宽50Hz~10kHz、非线性失真≤3%、效…

2026/9/20 16:01:36 阅读更多 →
大模型权重下载慢?用91n多线程与断点续传提速

大模型权重下载慢?用91n多线程与断点续传提速

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 16:01:36 阅读更多 →
大模型应用技术选型:提示工程、RAG与微调对比

大模型应用技术选型:提示工程、RAG与微调对比

1. 大模型应用技术选型全景图当企业或开发者准备将大语言模型(LLM)落地到实际业务场景时,通常会面临三个主流技术路线的选择:提示工程(Prompt Engineering)、检索增强生成(RAG)和模型…

2026/9/20 16:01:36 阅读更多 →
绵阳网站建设科雨网络报价单揭秘:源码下载才不亏

绵阳网站建设科雨网络报价单揭秘:源码下载才不亏

绵阳网站建设科雨网络报价单揭秘:源码下载才不亏 域名和服务器到底选哪家?这问题问得我头疼。 很多老板在找绵阳网站建设科雨网络这类服务商时,第一反应就是看价格,但往往忽略了最核心的“资产归属”。 如果你拿到手只是一堆编译好的文件,甚至连后台账号密码都控制不了,那你花钱买的就是个“牢笼”。…

2026/9/20 16:01:04 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →