上QQ阅读APP看书,第一时间看更新
4.4.5 VertexModifiers
VertexModifiers模块的作用是作为顶点修改器。顶点修改器为效果制作提供了更多基础方法和规则。
VertexModifiers模块的文件夹结构如图4-7所示。
图4-7 VertexModifiers模块的文件夹结构图
VertexModifiers模块主要用于修改图形网格,在UI元素网格生成完毕后可对其进行二次修改。
其中BaseMeshEffect类是抽象基类,提供所有在修改UI元素网格时所需的变量和接口。
IMeshModifier是关键接口,在渲染核心类Graphic中会获取所有拥有这个接口的组件,然后依次遍历并调用ModifyMesh接口来触发改变图像网格的效果。
当前在源码中拥有的二次效果包括Outline(包边框)、Shadow(阴影)、PositionAsUV1(位置UV),都继承自BaseMeshEffect基类,并实现了关键接口ModifyMesh。其中Outline继承自Shadow,它们的共同关键代码如下:
protected void ApplyShadowZeroAlloc(List<UIVertex>verts, Color32 color, int start, int end, float x, float y) { UIVertex vt; var neededCpacity = verts.Count * 2; if (verts.Capacity<neededCpacity) verts.Capacity = neededCpacity; for (int i = start; i<end; ++i) { vt = verts[i]; verts.Add(vt); Vector3 v = vt.position; v.x += x; v.y += y; vt.position = v; var newColor = color; if (m_UseGraphicAlpha) newColor.a = (byte)((newColor.a * verts[i].color.a) / 255); vt.color = newColor; verts[i] = vt; } }
ApplyShadowZeroAlloc()函数的作用是在原有的网格顶点基础上加入新的顶点,这些新的顶点复制了原来的顶点数据,修改颜色并向外扩充,使得在原图形外渲染出外描边或者阴影。