您的位置:首页 > 其它

Mesh学习笔记3-创建一个box

2015-03-20 17:29 375 查看
using UnityEngine;
using System.Collections;

//与面类似,只不过法线不是顶点了
public class MeshBox : MonoBehaviour {

private float m_Length = 1f;
private float m_Width = 1f;

// Use this for initialization
void Start () {
Test ();
}
public void Test()
{
MeshBuilder meshBuilder = new MeshBuilder();

Vector3 upDir = Vector3.up * m_Length;
Vector3 rightDir = Vector3.right * m_Width;
Vector3 forwardDir = Vector3.forward * m_Length;

Vector3 nearCorner = Vector3.zero;
Vector3 farCorner = upDir + rightDir + forwardDir;

BuildQuad(meshBuilder, nearCorner, forwardDir, rightDir);
BuildQuad(meshBuilder, nearCorner, rightDir, upDir);
BuildQuad(meshBuilder, nearCorner, upDir, forwardDir);

BuildQuad(meshBuilder, farCorner, -rightDir, -forwardDir);
BuildQuad(meshBuilder, farCorner, -upDir, -rightDir);
BuildQuad(meshBuilder, farCorner, -forwardDir, -upDir);

//Mesh mesh = meshBuilder.CreateMesh();

MeshFilter filter = this.gameObject.AddComponent<MeshFilter> ();
if (filter != null)
{
filter.sharedMesh = meshBuilder.CreateMesh();
}

MeshRenderer meshRender = this.gameObject.AddComponent<MeshRenderer> ();
Shader shader = Shader.Find ("Diffuse");
meshRender.sharedMaterial = new Material (shader);
}

void BuildQuad(MeshBuilder meshBuilder, Vector3 offset, Vector3 widthDir, Vector3 lengthDir)
{
Vector3 normal = Vector3.Cross(lengthDir, widthDir).normalized;

meshBuilder.Vertices.Add(offset);
meshBuilder.UVs.Add(new Vector2(0.0f, 0.0f));
meshBuilder.Normals.Add(normal);

meshBuilder.Vertices.Add(offset + lengthDir);
meshBuilder.UVs.Add(new Vector2(0.0f, 1.0f));
meshBuilder.Normals.Add(normal);

meshBuilder.Vertices.Add(offset + lengthDir + widthDir);
meshBuilder.UVs.Add(new Vector2(1.0f, 1.0f));
meshBuilder.Normals.Add(normal);

meshBuilder.Vertices.Add(offset + widthDir);
meshBuilder.UVs.Add(new Vector2(1.0f, 0.0f));
meshBuilder.Normals.Add(normal);

int baseIndex = meshBuilder.Vertices.Count - 4;

meshBuilder.AddTriangle(baseIndex, baseIndex + 1, baseIndex + 2);
meshBuilder.AddTriangle(baseIndex, baseIndex + 2, baseIndex + 3);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: