在前面的篇章中已经有了怎么Mesh画一个立方体,当时的立方体是按照逆时针的画的,其它大都都是按照顺时针画的,当时一开始画立方体顺时针没画出来,有些面看不到就调换了下顺序,没特别注意方向问题,然而这一篇贴图是会暴露出这个问题,下面我们细细说来:
先展示两张最终结果:
一.Cube顺逆时针画的差异
我们用同样的方法画两个除了时针方向不一样,其它都一样的立方体。
脚本如下:
using UnityEngine;
using System.Collections;
public enum Direction
{
ClockWise,
Anti_ClockWise
}
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
public class TestCubeDirection : MonoBehaviour
{
public Material mat;
public Direction direction;
// Use this for initialization
void Start()
{
switch (direction)
{
case Direction.ClockWise:
DrawClockWiseCube();
break;
case Direction.Anti_ClockWise:
DrawAnti_ClockWiseCube();
break;
}
}
/// <summary>
/// 按顺时针画立方体
/// </summary>
void DrawClockWiseCube()
{
gameObject.GetComponent<MeshRenderer>().material = mat;
Mesh mesh = GetComponent<MeshFilter>().mesh;
mesh.Clear();
//设置顶点
mesh.vertices = new Vector3[]
{ new Vector3(0, 0, 0),
new Vector3(1, 0, 0),
new Vector3(1, 1, 0),
new Vector3(0, 1, 0),
new Vector3(0, 1, 1),
new Vector3(1, 1, 1),
new Vector3(1, 0, 1),
new Vector3(0, 0, 1),
};
//顺时针设置三角形的方向
mesh.triangles = new int[]
{
3, 0, 1,
3,1,2,
2,4,3,
2,5,4,
7,4,5,
7,5,6,
0,7,6,
0,6,1,
3,4,7,
3,7,0,
1,6,5,
1,5,2
};
}
/// <summary>
/// 按逆时针画立方体
/// </summary>
void DrawAnti_ClockWiseCube()
{
gameObject.GetComponent<MeshRenderer>().material = mat;
Mesh mesh = GetComponent<MeshFilter>().mesh;
mesh.Clear();
//设置顶点
mesh.vertices = new Vector3[]
{ new Vector3(0, 0, 0),
new Vector3(1, 0, 0),
new Vector3(1, 1, 0),
new Vector3(0, 1, 0),
new Vector3(0, 1, 1),
new Vector3(1, 1, 1),
new Vector3(1, 0, 1),
new Vector3(0, 0, 1),
};
//逆时针设置
mesh.triangles = new int[]
{
3,1,0,
3,2,1,
2,3,4,
2,4,5,
7,5,4,
7,6,5,
0,6,7,
0,1,6,
3,7,4,
3,0,7,
1,5,6,
1,2,5
};
}
}
结果如图所示:
顺时针方向的看不到看它那个方向的面,而逆时针的不会,都能看到,所以这里遗留一个问题在这里,后面还会提到。
遗留问题:顺时针,立方体不能看到朝向自己的面?
二、给立方体Cube贴图
一开始想的时候是一点思路一样,根据API上面的意思,贴图的数组大小和顶点数的大小是一致的,但是8个顶点是决定不了6个面的,想了很久想不明白后,楼主动手做了个
立方体,给它贴图:
版权声明:本文为HeBiReChenAi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。