![a3bc2e0f80231ead6a3a913b783cc080.png](https://i-blog.csdnimg.cn/blog_migrate/a85fbd47a6ca870ac155d7c851f1325a.jpeg)
上一篇文章中介绍了雷达图的顶点计算炉石不传说:Unity中绘制属性雷达图《一》zhuanlan.zhihu.com
![24188471ba75152e1bd10d9fb758ed87.png](https://i-blog.csdnimg.cn/blog_migrate/f25b67ec02e7149e27a45405f751d831.jpeg)
这篇文章主要介绍绘制原理以及绘制代码。
一、绘制原理
我们知道计算机图形绘制中最基本的图元为三角形,所以我们需要把我们绘制的雷达图拆解为三角形,然后将这些三角形的顶点数据传递给图形API接口,计算机才能绘制出我们想要的图形。在Unity中绘制UI的API就是OnPopulateMesh(VertexHelper vh)这个函数了。我们只需要把数据传个它,剩下的工作就由Unity帮我们完成了。
首先我们看一下这个函数OnPopulateMesh的参数VertexHelper ,它主要是提供绘制三角形的API。我在雷达图中使用了AddUIVertexStream(List<UIVertex> verts, List<int> indices)绘制接口,提供顶点列表和顶点索引的方式来绘制,你也可以选择绘制矩形的接口AddUIVertexQuad(UIVertex[] verts),最终实现效果都是一样的,根据个人习惯选择绘制接口。下图是这个VertexHelper 类的接口函数:
![c75d38584ed001fbea8cc1ebe4204031.png](https://i-blog.csdnimg.cn/blog_migrate/e180a51c11f6f7d0fb063216806e2a8f.jpeg)
二、雷达图的绘制代码讲解
一、OnPopulateMesh函数
1、polygonVertex用于存储多边形顶点数据,大小+1是为了绘制的时候去点方便。
2、float rad = 2 * Mathf.PI / m_polygonCount;把圆周平分成11个维度,然后计算出每个维度的弧度值rad。
3、已知斜边和夹角,根据三角函数计算出每个顶点的坐标值。
polygonVertex[i].x = m_center.x + m_radius * Mathf.Cos(a);
polygonVertex[i].y = m_center.y + m_radius * Mathf.Sin(a);
4、特殊枚举值含义
EAlign.Y_FORWARD是标记起始坐标点是从X轴开始还是Y轴还是
EDirection.CLOCKWISE是标记这次绘制填充数据三角的顺序是按照顺时针还是逆时针
5、vh_.AddUIVertexStream(m_vertexs, m_triangles)是Unity绘制接口,传入顶点和顶点索引按照顺序进行绘制。