NGUI渲染元件基類 UIWidget

2022-07-26 21:00:21 字數 2554 閱讀 6516

目錄:​ngui原始碼學習​

一、uigeometry:儲存了集合圖形的頂點資訊,包括頂點座標、uv、顏色值資訊,並提供了這些資訊的獲取方法。這些頂點資訊最終會新增到所屬uiwidget的uidrawcall裡。

uigeometry:幾何物件資料儲存、獲取

property:

verts:頂點陣列,正常是4個

uvs:紋理

cols:顏色

mrtpverts:相對panel的頂點

mrtpnormal:相對panel的法線

mrtptan:相對panel的切線

function:

hasvertices:是否擁有頂點,有頂點才參與繪製

writetobuffers:獲取mrtpverts、uvs、cols、mrtpnormal、mrtptan

二、uiwidget:座標、透明度、大小的更新,在uipanel呼叫。

uilabel、uitexture、uisprite的父類,提供了大部分元件都需要的一些字段,如width、height、depth、color、alpha等等,同時也有一些共同的方法,如較為重要的updategeometry、updatetransform等。

uiwidget:uirect

property:

mchanged:標記當前是否有修改,有修改則更新矩形

mmoved:標記當前位置是否有更改

geometry:幾何資訊,用來儲存頂點,位置,頂點uv,頂點顏色等資訊,一對一

drawcall:當前uiwidget所屬的dc物件,一對多,乙個dc可以包含多個widget,但乙個widget只能有乙個dc。

drawregion:用來表示乙個widget最後渲染的區域(而不改變widget本身的大小)。例如uiprogressbar進度條就是修改的drawregion而不是width/height。

drawingdimensions:實際顯示區域大小

width&height:get;set;寬高

color:get;set;顏色

misvisiblebypanel:panel是否可見

misvisiblebyalpha:parent是否可見

finalalpha:最終的alpha值

pivot:get;set;錨點,立即生效,rawpivot是設定標記位mchanged

depth:get;set;相對於父節panel顯示層級,會導致dc重建

raycastdepth:get;最終顯示層級,(panel != null) ? mdepth + panel.depth * 1000 : mdepth;並不生效

localcorners/localcenter:get;顯示矩形的四個角資訊,順序是:左下,左上,右上,右下

worldcorners/worldcenter:get;顯示矩形的四個角資訊

material:get;set;材質

maintexture:get;材質球的貼圖

shader:get;材質球的shader

function:

setdimensions:修改矩形大小

getsides:獲取widget四個邊的世界座標

setrect:設定矩形的位置、大小

calculatebounds:bounds包圍盒計算

setdirty:標記需要更新矩形所屬的drawcall

markaschanged:更新矩形以及所屬的drwacall

onanchor:更新矩形大小、座標,設定mchanged

updatevisibility:更新是否可見

updatefinalalpha:更新透明度

updatetransform:更新座標變化

updategeometry:更新geometry資訊,呼叫onfill

onfill:填充geometry,任何幾何和渲染屬性(比如錨點,大小,顏色,alpha,位置)發生變化,都會導致這個方法被呼叫。

通常這個方法也是最消耗cpu的。

converttotexcoords:sprite的x,y對應圖集的左上角,這邊轉成(0,1)範圍的以左下角起點、相對圖集位置的uv點

lateupdate-updateself-updatedrawcalls

updateself-updatetransformmatrix-updatelayers-updatewidgets-fillalldrawcalls-writetobuffers

updatewidgets-updatetransform-updatevisibility-updategeometry

updategeometry-onfill-fill

座標更新updatetransform:呼叫setdimensions設定mmoved=true或trans.haschanged=true時,會重新計算並更新左下、右上角的座標moldv0、moldv1,並通知呼叫updatevisibility。

alpha更新:分三步

geometry更新:

如果mmoved或mchanged(移動、顯示狀態變化)為true,通知所屬的drawcall更新自己。

NGUI 渲染順序概述

ngui渲染順序概述 ngui用panel來管理渲染.乙個uipanel例項表示乙個panel.在渲染時,panel遍歷它管理的所有widgets.生成drawcall命令list.於是ngui需要控制的渲染順序包括以下 ui 是 2d 的,不需要在渲染時開啟深度測試 depth test 因此,若...

NGUI核心元件之UIAtlas

uiatlas是乙個容器,他包含了許多sprite的座標資訊。如果你對這個概念不是很熟悉,你可以這樣理解 與使用很多小的貼圖來渲染ui相比,使用一張包含了所有小貼圖的大貼圖的效率要高許多。這些小的貼圖就被叫做sprite,這個大的貼圖就被叫做atlas。在使用ngui渲染任何東西之前,首先需要建立乙...

react 八 父元件渲染,子元件不渲染

父元件渲染,子元件跟著渲染,不論引數是否變化,這是個坑 解決思路 步驟一 將html內容新增到狀態變數 constructor 步驟二 在render中將html替換成狀態變數 步驟三 觸發子元件渲染時,設定狀態變數 handlescroll 底部元件響應樣式 scrolltop 900?local...