《OpenGL-自主高性能三维GIS平台架构与实现 第一季》适合有 C++ 和一点 OpenGL 基础、想自己做三维地图而不是只会调 Cesium 的人。课按引擎骨架推进:窗口与上下文、多线程绘制、资源/纹理管理、3D 场景与摄像机(缩放、任意点旋转、漫游),再做包围盒/包围球、坐标转换和射线拾取。场景侧用四叉树算 TileId、节点分割与瓦片加载;数据侧用生产者-消费者任务系统把 IO 和 GL 上传拆开。性能部分覆盖 API 耗时、顶点/纹理打包、不可见裁剪、纹理压缩和 cache。收尾用 DLL 重构,支持嵌入外部窗口,并做任意格式瓦片、TMS、HttpGoogle、自定义绘制、GDI
多数人做三维 GIS,路径是拿 Cesium 或 Cesium 的封装,调 API 把地球转起来,能出效果就算完。但一旦遇到「瓦片加载卡在 UI 线程」「拾取精度对不上」「想换成自定义投影」这类问题,就只能绕路,因为你没有碰过底下的帧循环。这门第一季的价值就在这:它不教你用某个库,而是从窗口、GL 上下文和帧循环开始,把一台能跑瓦片的三维地图引擎的骨架搭出来。适合已经会 C++、OpenGL 写过几个 Demo,但没做过完整渲染框架的人。
窗口与上下文、多线程绘制、资源与纹理管理这几节,看起来像「环境搭建」,其实是整季的技术债源头。后面瓦片一多就卡、纹理上传抢主线程、资源句柄乱引,问题基本都出在这里。课程把 IO 和 GL 上传拆成生产者—消费者任务系统,这个设计决定了你后面能不能一边漫游一边流式加载。精看这一段的异步任务模型,比记住某个 API 写法有用得多。
摄像机部分值得逐节过:缩放、绕任意点旋转、漫游,看上去是交互细节,实际是坐标变换的集中训练。任意点旋转要处理的是相机矩阵与地物位置的相对关系,漫游则牵扯速度与视锥的配合。把这两块吃透,你再看包围盒、包围球和射线拾取会顺很多,因为本质是同一套空间变换的正反用。
这季的 GIS 味道集中在两块。一是经纬度与墨卡托之间的投影转换,二是用四叉树管理瓦片场景:算 TileId、节点分割、按需加载。这两件事决定了你的引擎是「三维渲染器」还是「三维地图」。四叉树那几个小节建议对照自己的瓦片目录结构边看边画,节点分割的阈值、TileId 的编码方式,直接关系到后面接不同图源时对不对得上。
场景侧讲完,数据侧接上 DLL 插件加载 TMS / Google 图源——这是很务实的一步:把图源做成插件,而不是硬编码在引擎里,你换源、加源都不用重编主程序。同段的 GDI 绘制和 Shapefile 矢量加载,则是把「矢量叠加」这条线打开,第一季先做到能读能画,深度留到后续。
API 耗时统计、顶点与纹理打包、不可见裁剪、纹理压缩,这些不是锦上添花的优化章,而是决定你能带多少瓦片的硬指标。建议的做法是:先把前面骨架跑通,再带着「一屏现在能画多少」的问题回头看这几节,把打包和裁剪手段一个个加回自己的工程里量效果。只读不测,这段的收益会大打折扣。
一句话判断:如果你想的是「看懂别人怎么做」,这季偏重;如果你想的是「自己搭一台能持续加瓦片的引擎」,这季的取舍很对路——它把精力压在骨架、坐标和资源流上,而不是堆效果截图。
这是自主三维 GIS 引擎的第一季:用 OpenGL 从窗口、上下文和帧循环搭起渲染框架,再做摄像机漫游、包围盒/射线拾取、经纬度与墨卡托投影,并用四叉树管理瓦片场景。后半段补上异步任务系统、顶点/纹理打包与裁剪优化,最后用 DLL 插件加载 TMS / Google 图源、GDI 绘制和 Shapefile 矢量。
课程推荐
《OpenGL-自主高性能三维GIS平台架构与实现 第一季》适合有 C++ 和一点 OpenGL 基础、想自己做三维地图而不是只会调 Cesium 的人。课按引擎骨架推进:窗口与上下文、多线程绘制、资源/纹理管理、3D 场景与摄像机(缩放、任意点旋转、漫游),再做包围盒/包围球、坐标转换和射线拾取。场景侧用四叉树算 TileId、节点分割与瓦片加载;数据侧用生产者-消费者任务系统把 IO 和 GL 上传拆开。性能部分覆盖 API 耗时、顶点/纹理打包、不可见裁剪、纹理压缩和 cache。收尾用 DLL 重构,支持嵌入外部窗口,并做任意格式瓦片、TMS、HttpGoogle、自定义绘制、GDI 多线程和 Shapefile 矢量插件。【技能收获】学完可掌握:OpenGL 渲染框架与多线程上下文、三维摄像机与拾取、墨卡托投影与经纬度转换、四叉树瓦片调度、异步任务系统、绘制批处理与裁剪、GIS 图源/矢量插件。105 节按模块连续推进,便于对照代码搭出可演示的三维地图。【学习建议】建议按 1~105 顺序:先把 1~21 的窗口和摄像机跑通,22~41 做完包围体、射线和投影,42~56 画出四叉树瓦片,57~80 把异步加载和性能优化接上,81~105 再做插件化图源与 shp。每完成一块就保存一帧「能拖动缩放的地图」截图,比只看原理更能写进作品集。【就业发展】可面向岗位:三维 GIS 引擎开发、图形渲染工程师、数字孪生 / 地图可视化。政务一张图和行业 GIS 仍需要能自己做瓦片调度、相机漫游和矢量叠加的人,手写 OpenGL 引擎比只会调现成三维地球 API 更有底层说服力。
视频目录(105 节)
* 1 课程介绍.mp4
* 2 窗口建立.mp4
* 3 环境配置.mp4
* 4 窗口类的抽象封装.mp4
* 5 上下文管理(OpenGLSetup).mp4
* 6 OpenGL帧循环.mp4
* 7 事件处理.mp4
* 8 获取OpenGL高版本功能.mp4
* 9 框架之-OpenGL封装.mp4
* 10 框架之-Frame.mp4
* 11 框架之多线程绘制.mp4
* 12 框架之多线程绘制(2).mp4
* 13 上下文管理(框架数据结构).mp4
* 14 上下文管理(框架数据结构)-资源管理.mp4
* 15 上下文管理(框架数据结构)-资源管理2.mp4
* 16 上下文管理(框架数据结构)-纹理管理.mp4
* 17 上下文管理(框架数据结构)-Image.mp4
* 18 创建3D场景.mp4
* 19 引入摄像机.mp4
* 20 摄像机完善.mp4
* 21 摄像机控制.mp4
* 22 摄像机控制-鼠标缩放.mp4
* 23 三维向量实现-包围盒-包围球.mp4
* 24 包围盒计算通用化以及变化更新.mp4
* 25 包围盒-实践.mp4
* 26 包围球.mp4
* 27 坐标转换,实现经纬度-世界坐标-窗口坐标.mp4
* 28 射线.mp4
* 29 射线的应用-三角形相交.mp4
* 30 射线的应用-拾取.mp4
* 31 摄像机的完善.mp4
* 32 优化完善框架-资源数据优化处理.mp4
* 33 优化OpenGL线程上下文处理.mp4
* 34 墨卡托投影.mp4
* 35 摄像机原理介绍.mp4
* 36 第三人称摄像机.mp4
* 37 摄像机的旋转-中心点.mp4
* 38 代码整理封装.mp4
* 39 摄像机的旋转-任意点.mp4
* 40 摄像机缩放-任意点推进.mp4
* 41 摄像机移动漫游.mp4
* 42 场景管理的知识介绍-Octree-QuadTree-BSP.mp4
* 43 四叉树-TileId计算.mp4
* 44 瓦片Id计算&坐标转换.mp4
* 45 场景管理-四叉树-初步.mp4
* 46 场景管理-四叉树-框架.mp4
* 47 场景管理-四叉树-框架2.mp4
* 48 场景管理-四叉树-节点分割-退化.mp4
* 49 场景管理-四叉树绘制.mp4
* 50 场景管理-四叉树-瓦片加载.mp4
* 51 场景管理-四叉树-无数据处理.mp4
* 52 场景管理-四叉树-无数据处理(2).mp4
* 53 场景管理-四叉树-无数据处理-方式2.mp4
* 54 场景管理-四叉树-无数据处理-方式2-数据不全处理.mp4
* 55 场景管理-四叉树-优化操作-总结.mp4
* 56 场景管理-四叉树-优化操作-总结.mp4
* 57 数据管理-异步数据加载.mp4
* 58 任务系统-线程模型(生产者与消费者).mp4
* 59 任务系统-线程间通讯的基础.mp4
* 60 任务系统-接口定义实现.mp4
* 61 任务系统-框架实现.mp4
* 62 任务系统-框架实现(2).mp4
* 63 任务系统-打通流程.mp4
* 64 任务系统-OpenGL数据流程.mp4
* 65 任务系统-流程优化.mp4
* 66 任务系统-流程优化2.mp4
* 67 影响性能的因素(时间都去哪里了).mp4
* 68 API调用时间原理分析.mp4
* 69 顶点数据打包.mp4
* 70 顶点数据打包-索引方式.mp4
* 71 纹理打包(方式1).mp4
* 72 纹理打包(方式2-数组cache).mp4
* 73 纹理打包(方式2-数组cache)2.mp4
* 74 降低绘制数据量.mp4
* 75 优化节点(不可见处理).mp4
* 76 优化节点(不可见处理)2.mp4
* 77 优化节点(不可见处理).mp4
* 78 纹理压缩.mp4
* 79 cache(缓存).mp4
* 80 总结.mp4
* 81 框架设计原理.mp4
* 82 利用dll(动态链接库)重构架构.mp4
* 83 主工程的接口设计与实现.mp4
* 84 改进完善代码支持嵌入到其他窗口中.mp4
* 85 外部输入事件处理.mp4
* 86 瓦片插件-任意格式瓦片支持.mp4
* 87 瓦片插件-任意格式瓦片支持2.mp4
* 88 瓦片插件-任意格式瓦片支持3.mp4
* 89 瓦片插件-任意格式瓦片支持5.mp4
* 90 瓦片插件-任意格式瓦片支持4.mp4
* 91 图源插件应用-TMS图源加载.mp4
* 92 瓦片插件-HttpGoogle.mp4
* 93 瓦片插件-HttpGoogle(2).mp4
* 94 瓦片插件-HttpGoogle(3).mp4
* 95 瓦片插件-通用插件(1).mp4
* 96 瓦片插件-通用插件(2).mp4
* 97 瓦片插件-通用插件(3).mp4
* 98 瓦片插件-用户自定义绘制.mp4
* 99 -瓦片插件-GDI多线程绘制.mp4
* 100 瓦片插件-Shapefile(Shp)瓦片.mp4
* 101 801-架构设计-矢量.mp4
* 102 802-架构设计-矢量接口实现(shp文件解析).mp4
* 103 803-架构设计-矢量接口实现(shp文件解析.mp4
* 104 804-架构设计-矢量接口实现(shp文件解析)..mp4
* 105 805-架构设计-矢量接口实现(shp文件解析).mp4