示例#1
0
    private void AddIndices(int innerOffset, int innerSides, int outerOffset, int outerSides)
    {
        var stepInner      = 1.0f / innerSides;
        var stepOuter      = 1.0f / outerSides;
        var indexInner     = 0;
        var indexOuter     = 0;
        var progress       = 0.0f;
        var remainingInner = innerSides;
        var remainingOuter = outerSides;

        if (remainingInner == 1)
        {
            remainingInner = 0;
        }

        while (remainingInner > 0 || remainingOuter > 0)
        {
            var targetInner    = (indexInner + 1) * stepInner;
            var targetOuter    = (indexOuter + 1) * stepOuter;
            var remainderInner = targetInner - progress;
            var remainderOuter = targetOuter - progress;

            if (remainderInner <= remainderOuter && remainingInner > 0)
            {
                SgtProceduralMesh.PushIndex(innerOffset + indexInner % innerSides);

                SgtProceduralMesh.PushIndex(outerOffset + indexOuter % outerSides);

                SgtProceduralMesh.PushIndex(innerOffset + (indexInner + 1) % innerSides);

                progress        = targetInner;
                remainingInner -= 1;
                indexInner     += 1;
            }

            if (remainderInner >= remainderOuter && remainingOuter > 0)
            {
                SgtProceduralMesh.PushIndex(outerOffset + (indexOuter + 1) % outerSides);

                SgtProceduralMesh.PushIndex(innerOffset + indexInner % innerSides);

                SgtProceduralMesh.PushIndex(outerOffset + indexOuter % outerSides);

                progress        = targetOuter;
                remainingOuter -= 1;
                indexOuter     += 1;
            }
        }
    }