Пример #1
0
    public void GenerateMesh()
    {
        _vertices.Clear();
        _triangles.Clear();

        if (ParamCubeSize == null)
        {
            return;
        }

        // we need to determine the outline of the form
        float size = ParamCubeSize.Value;

        foreach (LinkPos curr in LinkPosList)
        {
            Face    mask    = curr.Mask;
            UnitPos currPos = curr.Center;
            // read mask from linkPos
            if ((mask & Face.Top) == Face.None)
            {
                int deb = _vertices.Count;
                _vertices.Add(new Vector3(currPos.x, currPos.y + size, currPos.z));
                _vertices.Add(new Vector3(currPos.x + size, currPos.y + size, currPos.z));
                _vertices.Add(new Vector3(currPos.x + size, currPos.y + size, currPos.z + size));
                _vertices.Add(new Vector3(currPos.x, currPos.y + size, currPos.z + size));
                AddTriangles(deb);
            }
            if ((mask & Face.Bot) == Face.None)
            {
                int deb = _vertices.Count;
                _vertices.Add(new Vector3(currPos.x + size, currPos.y, currPos.z + size));
                _vertices.Add(new Vector3(currPos.x + size, currPos.y, currPos.z));
                _vertices.Add(new Vector3(currPos.x, currPos.y, currPos.z));
                _vertices.Add(new Vector3(currPos.x, currPos.y, currPos.z + size));
                AddTriangles(deb);
            }
            if ((mask & Face.Right) == Face.None)
            {
                int deb = _vertices.Count;
                _vertices.Add(new Vector3(currPos.x + size, currPos.y, currPos.z + size));
                _vertices.Add(new Vector3(currPos.x + size, currPos.y + size, currPos.z + size));
                _vertices.Add(new Vector3(currPos.x + size, currPos.y + size, currPos.z));
                _vertices.Add(new Vector3(currPos.x + size, currPos.y, currPos.z));
                AddTriangles(deb);
            }
            if ((mask & Face.Left) == Face.None)
            {
                int deb = _vertices.Count;
                _vertices.Add(new Vector3(currPos.x, currPos.y, currPos.z + size));
                _vertices.Add(new Vector3(currPos.x, currPos.y, currPos.z));
                _vertices.Add(new Vector3(currPos.x, currPos.y + size, currPos.z));
                _vertices.Add(new Vector3(currPos.x, currPos.y + size, currPos.z + size));
                AddTriangles(deb);
            }
            if ((mask & Face.Front) == Face.None)
            {
                int deb = _vertices.Count;
                _vertices.Add(new Vector3(currPos.x, currPos.y + size, currPos.z));
                _vertices.Add(new Vector3(currPos.x, currPos.y, currPos.z));
                _vertices.Add(new Vector3(currPos.x + size, currPos.y, currPos.z));
                _vertices.Add(new Vector3(currPos.x + size, currPos.y + size, currPos.z));
                AddTriangles(deb);
            }
            if ((mask & Face.Back) == Face.None)
            {
                int deb = _vertices.Count;
                _vertices.Add(new Vector3(currPos.x + size, currPos.y, currPos.z + size));
                _vertices.Add(new Vector3(currPos.x, currPos.y, currPos.z + size));
                _vertices.Add(new Vector3(currPos.x, currPos.y + size, currPos.z + size));
                _vertices.Add(new Vector3(currPos.x + size, currPos.y + size, currPos.z + size));
                AddTriangles(deb);
            }
        }

        CustomMesh.Clear();
        CustomMesh.vertices  = _vertices.ToArray();
        CustomMesh.triangles = _triangles.ToArray();
        CustomMesh.RecalculateNormals();
    }