快三年了,在簡書寫了四篇文章,關于Cesium的基本都是水一下,不是不想寫,一是沒時間,二來確實比較懶,關于Cesium已經一年多沒有看過了,最多也就關注一下官網的更新內容,對于Cesium深入了解還真沒有下功夫。
最近公司業(yè)務調整,手頭的業(yè)務也停掉了,只剩下維護了,也沒有繼續(xù)待著的意義了,趁著換工作的空,整理一下以前抄過、請教過、寫過的一些東西吧,不確定能寫多少,就簡單記錄一下吧。
Ceisum本身有一個clipPlane可以進行裁剪,但是不支持多邊形裁剪,想要支持多邊形裁剪也要費一番功夫。
多邊形裁剪的主要原理:
一、構造裁剪多邊形;
二、將構造多邊形的定點歸化到模型局部坐標系,并獲取模型Rectangle,記錄并傳遞給片元著色器;
三、將多邊形渲染到到一張構造的紋理上,給多邊形一個繪制的顏色,并將紋理賦值給片元著色器;
四、在頂點著色器中把從attribute獲取到的定點傳遞給片元著色器,如
gl_Position = czm_projection*u_modelViewMatrix* viewPos; //投影矩陣*模型視圖矩陣*頂點坐標
中的viewPos.xyz;
五、在片元著色器中,根據(四)中傳遞過來的頂點,判定該頂點是否在(二)中的rectangle中,若在,則計算該頂點在(三)中紋理的uv坐標,用texture2D(texture,uv)獲取當前頂點的color值,若不為空,則繼續(xù),若為空則discard并返回。
通過以上步驟就可以實現以多邊形為邊界的模型裁剪。