• NGUI渲染组件基类:UIWidget


    一、UIGeometry:保存了集合图形的顶点信息,包括顶点坐标、uv、颜色值信息,并提供了这些信息的获取方法。这些顶点信息最终会添加到所属UIWidget的UIDrawcall里。
    UIGeometry:几何对象数据存储、获取
            property:
            verts:顶点数组,正常是4个
            uvs:纹理
            cols:颜色
            mRtpVerts:相对panel的顶点
            mRtpNormal:相对panel的法线
            mRtpTan:相对panel的切线
            
            function:
            hasVertices:是否拥有顶点,有顶点才参与绘制
            ApplyTransform:计算mRtpVerts、mRtpNormal、mRtpTan
            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
    • 核心方法调用顺序:UpdateWidgets-UpdateTransform-UpdateVisibility-UpdateGeometry。在UIPanel的LateUpdate更新时调用。
    1. 坐标更新UpdateTransform:调用SetDimensions设置mMoved=true或trans.hasChanged=true时,会重新计算并更新左下、右上角的坐标mOldV0、mOldV1,并通知调用UpdateVisibility。
    1. alpha更新:分三步
    • 计算widget的透明度:bool vis =(w.CalculateCumulativeAlpha(frame) > 0.001f);
    • 计算widget是否被panel裁剪:UIPanel.IsVisible(w);
    • 更新mIsVisibleByAlpha、mIsVisibleByPanel状态。
    1. geometry更新:
    • 如果透明度和显示状态变化,调用子类实现的OnFill方法填充geometry。
    • 调用geometry.ApplyTransform转换顶点坐标。
    1. 如果mMoved或mChanged(移动、显示状态变化)为true,通知所属的drawCall更新自己。
  • 相关阅读:
    企业应用架构模式web表现层
    企业应用架构模式组织领域逻辑
    企业应用架构模式并发
    数据访问层
    企业应用架构模式映射到关系数据库
    企业应用架构模式引言
    领域驱动设计(精简版)
    企业应用架构模式分层
    服务层
    企业应用架构模式前言
  • 原文地址:https://www.cnblogs.com/wang-jin-fu/p/13509001.html
Copyright © 2020-2023  润新知