游戏中需要实现一个小功能,显示一个玩家的能力图,这个图是一个有6个顶点任意摆放组合的多边形。而绘制多边形主要用到的知识就是Mesh构建,mesh的构建主要需要顶点列表,三角形列表,法线列表、uv列表等等等等,在这里我们只考虑顶点列表和三角形列表。那么我们需要做的就是给定一组顶点之后,如何用三角形进行划分,以便绘制。
以下讨论的多边形:1.三角形顶点列表为顺时针顺序。2.多边形不能包含空洞。
参照文章:https://blog.csdn.net/huangzengman/article/details/77114082,表示感谢
1.凸多边形
凸多边形三角剖分比较简单,可以使用第一个点依次连接后面的其他点来组成一组共同顶点的三角形。当然这是最简单的凸多边形剖分算法,还有其他最优剖分算法,需要考虑权重等,但我们不需要。
a b
图a为凸多边形,标出了顶点序号。
图b为三角剖分后,unity中所显示的三角形网格。
2.凹多边形
凹多边形的剖分则需要判断点与多边形的关系,以此来确定可划分顶点与不可划分顶点。
a b
图a为凹多边形(没有空洞),标出了顶点序号。
图b为三角剖分后,unity中所显示的三角形网格。
代码如下,参考上述连接:
1.MeshDrawBase.cs 基础类
using System.Collections; using System.Collections.Generic; using UnityEngine; public abstract class MeshDrawBase : MonoBehaviour { protected MeshFilter targetFilter; protected Mesh mesh; protected int[] tris; protected Vector2[] uvs; protected Vector3[] normals; // Use this for initialization void Awake () { targetFilter = GetComponent<MeshFilter>(); } // Update is called once per frame protected virtual void Update () { DrawMesh(); } protected abstract void DrawMesh(); }