- Unity3D高級(jí)編程:主程手記
- 陸澤西
- 270字
- 2022-01-07 14:46:28
4.4.2 Culling模塊
Culling是對(duì)模型進(jìn)行裁剪的工具類,大都用在Mask(遮罩)上,只有Mask才有裁剪的需求。
如圖4-4所示,文件夾中包含四個(gè)文件,其中一個(gè)是靜態(tài)類,一個(gè)是接口類。

圖4-4 Culling模塊的文件夾結(jié)構(gòu)
Clipping類中有兩個(gè)函數(shù)比較重要,常被用在Mask的裁剪上,其源代碼如下:
public static Rect FindCullAndClipWorldRect(List<RectMask2D>rectMaskParents, out bool validRect) { if (rectMaskParents.Count == 0) { validRect = false; return new Rect(); } var compoundRect = rectMaskParents[0].canvasRect; for (var i = 0; i<rectMaskParents.Count; ++i) compoundRect = RectIntersect(compoundRect, rectMaskParents[i].canvasRect); var cull = compoundRect.width<= 0 || compoundRect.height<= 0; if (cull) { validRect = false; return new Rect(); } Vector3 point1 = new Vector3(compoundRect.x, compoundRect.y, 0.0f); Vector3 point2 = new Vector3(compoundRect.x + compoundRect.width, compoundRect.y + compoundRect.height, 0.0f); validRect = true; return new Rect(point1.x, point1.y, point2.x - point1.x, point2.y - point1.y); } private static Rect RectIntersect(Rect a, Rect b) { float xMin = Mathf.Max(a.x, b.x); float xMax = Mathf.Min(a.x + a.width, b.x + b.width); float yMin = Mathf.Max(a.y, b.y); float yMax = Mathf.Min(a.y + a.height, b.y + b.height); if (xMax>= xMin && yMax>= yMin) return new Rect(xMin, yMin, xMax - xMin, yMax - yMin); return new Rect(0f, 0f, 0f, 0f); }
上述代碼中的函數(shù)為Clipping類里的函數(shù),第一個(gè)函數(shù)FindCullAndClipWorldRect()的含義是計(jì)算RectMask2D重疊部分的區(qū)域。第二個(gè)函數(shù)RectIntersect()為第一個(gè)函數(shù)提供計(jì)算服務(wù),其含義是計(jì)算兩個(gè)矩陣的重疊部分。
這兩個(gè)函數(shù)都是靜態(tài)函數(shù),也可視為工具函數(shù),直接調(diào)用即可,不需要實(shí)例化。
推薦閱讀
- 深度實(shí)踐OpenStack:基于Python的OpenStack組件開(kāi)發(fā)
- Learn TypeScript 3 by Building Web Applications
- Scratch真好玩:教小孩學(xué)編程
- MATLAB for Machine Learning
- 區(qū)塊鏈底層設(shè)計(jì)Java實(shí)戰(zhàn)
- UVM實(shí)戰(zhàn)
- Spring Boot+MVC實(shí)戰(zhàn)指南
- Django 5企業(yè)級(jí)Web應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)(視頻教學(xué)版)
- PHP與MySQL權(quán)威指南
- Android Studio開(kāi)發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到App上線 (移動(dòng)開(kāi)發(fā)叢書)
- Java RESTful Web Service實(shí)戰(zhàn)
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)(Windows 7+Office 2010)
- Manage Your SAP Projects with SAP Activate
- Python程序設(shè)計(jì):基礎(chǔ)與實(shí)踐
- Java程序設(shè)計(jì)基礎(chǔ)教程