著色器里,給這座城動一場手術(shù))
上一篇我們把一整座會昌縣城的傾斜攝影搬進(jìn)了地球,最后留了這么一句:順手立個(gè) flag:這條 3DTiles 線才剛開頭。#32 是模型壓平(用自定義著色器把傾斜攝影的某一塊壓下去),再往后還有本地 3DTiles 查看器、大雁塔的內(nèi)置模型。壓平那篇要動的是Cesium3DTileFeature與自定義 shader,跟今天的"調(diào)度"完全不是一個(gè)層面。兌現(xiàn)的時(shí)候到了。不過得先認(rèn)個(gè)錯(cuò):我在上一段里猜錯(cuò)了半個(gè)——Cesium3DTileFeature一個(gè)字都沒碰。真正干活的,是一個(gè) 165 行的Flatten,和它拼出來的一段 GLSL。整件事的思路比"操作要素"粗暴得多,也優(yōu)雅得多:不去模型里找哪些要素要壓,而是在每一幀、每一個(gè)頂點(diǎn)上問一句"你在這個(gè)多邊形里嗎",在就摁下去。?? 本文涉及的全部代碼均已開源,完整的倉庫地址見文末,可自行取用、隨意魔改。本文目標(biāo)理解壓平的本質(zhì):不刪幾何,改頂點(diǎn)——以及 Cesium 給這條改頂點(diǎn)留的官方入口在哪讀懂那段"世界 → 局部 → 判定 → 改 z → 回世界"的三段坐標(biāo)往返,每一段用的是哪個(gè)矩陣搞清height: -50里的-50到底是以什么為零點(diǎn)(這是本篇最大的坑,實(shí)測給出答案)/