Cesium 3Dtiles模型多邊形裁剪簡單整理

快三年了,在簡書寫了四篇文章,關(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)教過、寫過的一些東西吧,不確定能寫多少,就簡單記錄一下吧。

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)以多邊形為邊界的模型裁剪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容