快三年了,在簡(jiǎn)書寫了四篇文章筛谚,關(guān)于Cesium的基本都是水一下刻获,不是不想寫瞎嬉,一是沒時(shí)間,二來確實(shí)比較懶沐兵,關(guān)于Cesium已經(jīng)一年多沒有看過了扎谎,最多也就關(guān)注一下官網(wǎng)的更新內(nèi)容毁靶,對(duì)于Cesium深入了解還真沒有下功夫逊移。
最近公司業(yè)務(wù)調(diào)整胳泉,手頭的業(yè)務(wù)也停掉了扇商,只剩下維護(hù)了,也沒有繼續(xù)待著的意義了蔬芥,趁著換工作的空笔诵,整理一下以前抄過、請(qǐng)教過思喊、寫過的一些東西吧次酌,不確定能寫多少岳服,就簡(jiǎn)單記錄一下吧。
Ceisum本身有一個(gè)clipPlane可以進(jìn)行裁剪纲辽,但是不支持多邊形裁剪拖吼,想要支持多邊形裁剪也要費(fèi)一番功夫吊档。
多邊形裁剪的主要原理:
一怠硼、構(gòu)造裁剪多邊形移怯;
二舟误、將構(gòu)造多邊形的定點(diǎn)歸化到模型局部坐標(biāo)系脐帝,并獲取模型Rectangle,記錄并傳遞給片元著色器炸站;
三旱易、將多邊形渲染到到一張構(gòu)造的紋理上,給多邊形一個(gè)繪制的顏色如暖,并將紋理賦值給片元著色器盒至;
四士修、在頂點(diǎn)著色器中把從attribute獲取到的定點(diǎn)傳遞給片元著色器棋嘲,如
gl_Position = czm_projection*u_modelViewMatrix* viewPos; //投影矩陣*模型視圖矩陣*頂點(diǎn)坐標(biāo)
中的viewPos.xyz;
五沸移、在片元著色器中雹锣,根據(jù)(四)中傳遞過來的頂點(diǎn)笆制,判定該頂點(diǎn)是否在(二)中的rectangle中,若在,則計(jì)算該頂點(diǎn)在(三)中紋理的uv坐標(biāo)匆篓,用texture2D(texture鸦概,uv)獲取當(dāng)前頂點(diǎn)的color值窗市,若不為空饮笛,則繼續(xù)福青,若為空則discard并返回。
通過以上步驟就可以實(shí)現(xiàn)以多邊形為邊界的模型裁剪祝谚。