天天看點

ThreeJS學習7_裁剪平面(clipping)

目錄

ThreeJS學習7_裁剪平面(clipping)

1. 裁剪平面簡介

2. 全局裁剪和局部裁剪

3. 被多個裁剪平面裁剪後

4. 被多個裁剪平面截斷後代碼

ThreeJS學習7_裁剪平面(clipping)

裁剪平面指的是存在一個平面, 能夠對場景中的物質進行截斷, 這個平面就是裁剪平面, 裁剪平面分為全局的裁剪和局部裁剪

全局裁剪指的有一個平面裁剪了整個場景的物體, 這需要在renderer中設定

局部裁剪指的有一個平面裁剪裁剪指定物體, 這需要在指定物體的material中設定

裡面涉及到被裁剪的物體的是否需要渲染陰影

裡面還涉及到被多個平面裁剪時, 保留并集還是交集, 下面一一講解

全局裁剪隻需要設定一樣

renderer.clippingPlanes = planes

renderer 是 WebGLRenderer執行個體,

clippingPlanes 是使用者自定義的剪裁平面,在世界空間中被指定為THREE.Plane對象。 這些平面全局使用。空間中與該平面點積為負的點将被切掉。 預設值是[]

planes類型為[], 元素是任意的平面, 啥子叫做點積為負, 也就是點到平面的向量和平面法向量夾角大于90度, 簡單來說, 平面法向量的反方向都被截斷, , 該平面的法向量為(-1, 0, 0), 法向量的方向為x軸的負方向, 距離原點的距離為0.2, 是以, 在x>0.2的區域全部被截斷不顯示

結合案例來看,

ThreeJS學習7_裁剪平面(clipping)

局部裁剪, 除了設定 renderer , 還要設定指定物質的material, 當平面裁剪時, 就隻有物質被裁剪, 看案例

ThreeJS學習7_裁剪平面(clipping)

此時的設定是

截斷陰影展示

ThreeJS學習7_裁剪平面(clipping)
ThreeJS學習7_裁剪平面(clipping)

​ 通過比對可以看出設定截斷陰影( clipShadows )為true時, 就像截斷後的物質不存在, 已經沒有陰影了, 設定為clipShadows為false時, 截斷後的物質仍然能産生陰影

設定material中的clipIntersection = true, 會隻裁剪更改剪裁平面的行為,以便僅剪切其交叉點,而不是它們的并集。

clipIntersection預設為false, 裁剪平面的并集

簡單來說, 有多個裁剪平面, 每個裁剪平面裁剪的區域分布為c1, c2, ... ,cn, 預設設定, 裁剪 c1區域+c2區域+...+cn區域, 當clipIntersection=true時, 裁剪的隻有這些區域共同的部分, c1 ∩ c2 ∩ ... cn

三個截斷平面法向量分布為(1, 0, 0), (0, -1, 0), (0, 0, -1), c1 為x負半軸區域, c2為 y正半軸, c3為z正半軸, 可以看到, 當clipIntersection為false時, c1, c2, c3區域都被截斷了, 當為true時, 截斷了他們共同的部分

效果如下

clipIntersection = true;

ThreeJS學習7_裁剪平面(clipping)

clipIntersection = false;

ThreeJS學習7_裁剪平面(clipping)

希望讀者在看完後能提出意見, 點個贊, 鼓勵一下, 我們一起進步. 加油 !!

繼續閱讀