/// <summary>
/// construct a new bsp tree from unity mesh
/// </summary>
/// <param name="mesh">unity mesh</param>
/// <param name="meshTransform">transformation</param>
/// <param name="id">id of the mesh</param>
public void Construct(Mesh mesh, Transform meshTransform, int id)
{
// cache mesh data
var trianglesNum = mesh.triangles.Length;
var meshTriangles = mesh.triangles;
var meshVertices = mesh.vertices;
var meshNormals = mesh.normals;
var meshUV = mesh.uv;
Polygons = new List<CSGPolygon>(trianglesNum/3);
for (int i = 0; i < trianglesNum; i+=3)
{
var id0 = meshTriangles[i];
var id1 = meshTriangles[i + 1];
var id2 = meshTriangles[i + 2];
Polygons.Add(new CSGPolygon(id, new CSGVertex(meshTransform.TransformPoint(meshVertices[id0]), meshTransform.TransformDirection(meshNormals[id0]), meshUV[id0]),
new CSGVertex(meshTransform.TransformPoint(meshVertices[id1]), meshTransform.TransformDirection(meshNormals[id1]), meshUV[id1]),
new CSGVertex(meshTransform.TransformPoint(meshVertices[id2]), meshTransform.TransformDirection(meshNormals[id2]), meshUV[id2])));
}
root = new CSGNode();
root.Build(Polygons);
}