unity模型制作:绘制一个凸多边形
Posted 左右...
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity模型制作:绘制一个凸多边形相关的知识,希望对你有一定的参考价值。
(不重要的前言:该博文为系列博文,每一篇有前后文关系,例如基类、组件的集成,如果发现有陌生组件和基类,请查看前面文章,本系列文章单纯应用unity的mesh来绘制模型,并未使用任何三方插件,文章内容、代码都是纯手打,望支持)
凸多边形是多边形里最简单的一种,如下图的一个五边形,有五个顶点,用任意一个顶点作为起始点,按顺序与其他点相连就可以组成一个多边形。
这个五边形就可以分为a(123)、b(134)、c(145)三个三角面
顶点三角面都有了,就可以画出图形了,上代码:
三角面:
public override List<int> GetTriangles()
List<int> triangles = new List<int>();
for (int i = 1; i < vertices.Count - 1; i++)
int index0 = i;
int index1 = i + 1;
triangles.Add(0);
triangles.Add(index0);
triangles.Add(index1);
return triangles;
uv:简单说下uv的思路,先找到左边的四个边界,最上、最下、最左、最右,四条线会组成一个矩形,每个点在矩形了横向和纵向的占比就是该点的uv
public override List<Vector2> GetUVs()
List<Vector2> uvs = new List<Vector2>();
Vector3 line01 = vertices[1] - vertices[0];
Vector3 line12 = vertices[2] - vertices[1];
Vector3 normal = Vector3.Cross(line01, line12).normalized;
Vector3 X_Axis = line01.normalized;
Vector3 Y_Axis = (Quaternion.AngleAxis(90, normal) * X_Axis).normalized;
float maxX = -1000;
float maxY = -1000;
float minX = 1000;
float minY = 1000;
List<Vector2> map = new List<Vector2>();
for (int i = 0; i < vertices.Count; i++)
float x = Vector3.Dot(vertices[i] - vertices[0], X_Axis);
float y = Vector3.Dot(vertices[i] - vertices[0], Y_Axis);
map.Add(new Vector2(x, y));
if (maxX < x) maxX = x;
if (maxY < y) maxY = y;
if (minX > x) minX = x;
if (minY > y) minY = y;
float xLen = maxX - minX;
float yLen = maxY - minY;
for (int i = 0; i < map.Count; i++)
uvs.Add(new Vector2((map[i].x - minX) / xLen, (map[i].y - minY) / yLen));
return uvs;
效果:
下一期写一下凹多边形绘制。
以上是关于unity模型制作:绘制一个凸多边形的主要内容,如果未能解决你的问题,请参考以下文章