Example #1
0
    public void MeshCreateCaps()
    {
        if (capInds.Count == 0)
        {
            return;
        }

        CreateCap();

        int newCapCount = capsSorted.Length;

        if (CustomUV)
        {
            float offX = CapUVMin.x, offY = CapUVMin.y;
            float dX = CapUVMax.x - CapUVMin.x, dY = CapUVMax.y - CapUVMin.y;
            for (int i = 0; i < newCapCount; i++)
            {
                capsUV[i].x = (capsUV[i].x * dX) + offX;
                capsUV[i].y = (capsUV[i].y * dY) + offY;
            }
        }

        //create cap verticies
        Vector3 normal    = Quaternion.Inverse(_ownRotation) * _splitPlane.Normal;
        Vector3 invNormal = -normal;

        int[] capUpperOrder = new int[capsSorted.Length];
        int[] capLowerOrder = new int[capsSorted.Length];
        if (UseCapUV)
        {
            for (int i = 0; i < newCapCount; i++)
            {
                capUpperOrder[i] = _mesh.AddCapVertex(capsSorted[i], invNormal, capsUV[i]);
                capLowerOrder[i] = _mesh.AddCapVertex(capsSorted[i], normal, capsUV[i]);
            }
        }
        else
        {
            for (int i = 0; i < newCapCount; i++)
            {
                capUpperOrder[i] = _mesh.AddCapVertex(capsSorted[i], invNormal);
                capLowerOrder[i] = _mesh.AddCapVertex(capsSorted[i], normal);
            }
        }

        int capOderCount = capUpperOrder.Length;

        for (int i = 2; i < capOderCount; i++)
        {
            _mesh.trisUp.Add(capUpperOrder[0]);
            _mesh.trisUp.Add(capUpperOrder[i - 1]);
            _mesh.trisUp.Add(capUpperOrder[i]);

            _mesh.trisDown.Add(capLowerOrder[0]);
            _mesh.trisDown.Add(capLowerOrder[i]);
            _mesh.trisDown.Add(capLowerOrder[i - 1]);
        }
    }
    private void AddTrianglesToMesh()
    {
        //create cap verticies
        Vector3 normal         = Quaternion.Inverse(_ownRotation) * _splitPlane.Normal;
        Vector3 invNormal      = -normal;
        int     capVertexCount = triList.Count;

        int[] capUpperOrder = new int[capVertexCount];
        int[] capLowerOrder = new int[capVertexCount];

        if (UseCapUV)
        {
            for (int i = 0; i < capVertexCount; i++)
            {
                int     triIndex = triList[i];
                Vector2 capUV    = uvList[i];
                capUpperOrder[i] = _mesh.AddCapVertex(triIndex, invNormal, capUV);
                capLowerOrder[i] = _mesh.AddCapVertex(triIndex, normal, capUV);
            }
        }
        else
        {
            for (int i = 0; i < capVertexCount; i++)
            {
                int triIndex = triList[i];
                capUpperOrder[i] = _mesh.AddCapVertex(triIndex, invNormal);
                capLowerOrder[i] = _mesh.AddCapVertex(triIndex, normal);
            }
        }

        for (int i = 2; i < capVertexCount; i += 3)
        {
            _mesh.trisUp.Add(capUpperOrder[i - 2]);
            _mesh.trisUp.Add(capUpperOrder[i]);
            _mesh.trisUp.Add(capUpperOrder[i - 1]);

            _mesh.trisDown.Add(capLowerOrder[i - 2]);
            _mesh.trisDown.Add(capLowerOrder[i - 1]);
            _mesh.trisDown.Add(capLowerOrder[i]);
        }
    }