这一章我们讲复杂的mesh为下一章的材质准备一些材料
8.1 创建一个矩形面片
本质就是绘制两个三角形面片,如图8-1.其代码有注释了就不做太多解释了。
public virtual Mesh createMesh()
{
Mesh mesh = new Mesh();
Vector3[] v3s = new Vector3[4];
v3s[0] = new Vector3(0, 0,0);
v3s[1] = new Vector3(0, 0,1);
v3s[2] = new Vector3(1, 0,0);
v3s[3] = new Vector3(1, 0,1);
mesh.vertices = v3s;
//绘制方向是顺时针
int[] index = new int[6];
//绘制第一个三角形是0->1->2
index[0] = 0;
index[1] = 1;
index[2] = 2;
//绘制第二个三角形是3->2->1
/*
* 1------------3
* | |
* | |
* | |
* | |
* | |
* | |
* 0------------2
*/
index[3] = 3;
index[4] = 2;
index[5] = 1;
mesh.triangles = index;
Vector2[] uvs = new Vector2[4];
uvs[0] = new Vector2(0, 0);
uvs[1] = new Vector2(1, 0);
uvs[2] = new Vector2(0, 1);
uvs[3] = new Vector2(1, 1);
mesh.uv = uvs;
mesh.RecalculateBounds();
mesh.RecalculateNormals();
return mesh;
8.2 创建一个由矩形面片联合而成的超长矩形面片
其代码如下,太简单了,不做解释
public override Mesh createMesh()
{
Mesh mesh = new Mesh();
int sc = 100;
//每四个点可以构成一个矩形面片
//本教程是构建一排矩形面片
Vector3[] v3s = new Vector3[sc * 4];
//绘制一个矩形面片需要指定6个绘制顺序
int[] index = new int[6* sc];
Vector2[] uvs = new Vector2[4* sc];
for (int i = 0; i < sc; i++) {
v3s[i * 4 + 0] = new Vector3(i, 0, 0);
v3s[i * 4 + 1] = new Vector3(i, 0, 1);
v3s[i * 4 + 2] = new Vector3(i + 1, 0, 0);
v3s[i * 4 + 3] = new Vector3(i + 1, 0, 1);
uvs[i*4+0] = new Vector2(i, 0);
uvs[i * 4 + 1] = new Vector2(1+1, 0);
uvs[i * 4 + 2] = new Vector2(i, 1);
uvs[i * 4 + 3] = new Vector2(1+1, 1);
}
for (int i = 0; i < sc; i++)
{
index[i * 6 + 0] = i*4;
index[i * 6 + 1] = i*4+1;
index[i * 6 + 2] = i*4+2;
index[i * 6 + 3] = i*4+3;
index[i * 6 + 4] = i*4+2;
index[i * 6 + 5] = i * 4 + 1;
}
mesh.vertices = v3s;
mesh.triangles = index;
mesh.uv = uvs;
return mesh;
}
8.3 创建一个由100*4*100个顶点的矩形面片
public override Mesh createMesh()
{
Mesh mesh = new Mesh();
int sc = 100;
int sr = 100;
//每四个点可以构成一个矩形面片
//本教程是构建一排矩形面片
Vector3[] v3s = new Vector3[sc * 4 * sr];
//绘制一个矩形面片需要指定6个绘制顺序
int[] index = new int[6 * sc * sr];
Vector2[] uvs = new Vector2[4 * sc * sr];
for (int i = 0; i < sc; i++)
{
for (int j = 0; j < sr; j++)
{
v3s[(i * sr + j) * 4 + 0] = new Vector3(i, 0, j);
v3s[(i * sr + j) * 4 + 1] = new Vector3(i, 0, 1 + j);
v3s[(i * sr + j) * 4 + 2] = new Vector3(i + 1, 0, j);
v3s[(i * sr + j) * 4 + 3] = new Vector3(i + 1, 0, 1 + j);
uvs[(i * sr + j) * 4+ 0] = new Vector2(i, j)/sc;
uvs[(i * sr + j) * 4+ 1] = new Vector2(1 + 1, j) / sc;
uvs[(i * sr + j) * 4+ 2] = new Vector2(i, 1 + j) / sc;
uvs[(i * sr + j) * 4 + 3] = new Vector2(1 + 1, 1 + j) / sc;
}
}
for (int i = 0; i < sc * sr; i++)
{
index[i * 6 + 0] = i * 4;
index[i * 6 + 1] = i * 4 + 1;
index[i * 6 + 2] = i * 4 + 2;
index[i * 6 + 3] = i * 4 + 3;
index[i * 6 + 4] = i * 4 + 2;
index[i * 6 + 5] = i * 4 + 1;
}
mesh.vertices = v3s;
mesh.triangles = index;
mesh.uv = uvs;
return mesh;
}