Exemple #1
0
            static public TopCellInfo GenerateInfo(NativeArray <MergeCellInfo> mergeInfoArray, int index, float cornerDistance, float rightDistance, float topRightDistance, float topDistance, ref int nextVertex, ref int nextTriIndex, bool hasTriangle)
            {
                MergeCellInfo mergeCell = mergeInfoArray[index];
                MergeTriInfo  mergeInfo = mergeCell.mergedInfo;

                if (mergeCell.canBeMerged)
                {
                    byte indexLength = (byte)(mergeInfo.triangleCount * 3);

                    byte config   = CalcConfiguration(cornerDistance, rightDistance, topRightDistance, topDistance);
                    var  cellInfo = new TopCellInfo()
                    {
                        info = new CellInfo()
                        {
                            config = config, cornerDist = cornerDistance, rightDist = rightDistance, topDist = topDistance
                        },
                        verts = new CellVertices {
                            corner = -1, leftEdge = -1, bottomEdge = -1
                        },
                        tris = new IndexSpan(nextTriIndex, indexLength)
                    };

                    if (hasTriangle)
                    {
                        nextTriIndex += indexLength;
                    }

                    if (mergeCell.needsVertex)
                    {
                        cellInfo.verts.corner = nextVertex;
                        ++nextVertex;
                    }

                    return(cellInfo);
                }
                else
                {
                    return(hasTriangle ?
                           TopCellMesher.GenerateInfoWithTriangles(cornerDistance, rightDistance, topRightDistance, topDistance, ref nextVertex, ref nextTriIndex) :
                           TopCellMesher.GenerateInfoNoTriangles(cornerDistance, rightDistance, topRightDistance, topDistance, ref nextVertex, ref nextTriIndex));
                }
            }
Exemple #2
0
 private int VertexIndexB2(MergeTriInfo tri) => infoArray[tri.triB2Cell].verts.corner;
Exemple #3
0
 public void CalculateIndices(Orderer orderer, byte config, int triangleIndex, MergeTriInfo mergeInfo, IndexSpan tris, CellVertices bl, CellVertices br, CellVertices tr, CellVertices tl)
 {
     if (mergeInfo.triangleCount > 0)
     {
         if (mergeInfo.triangleCount == 1)
         {
             orderer.AddTriangle(triangles, ref triangleIndex, VertexIndexA0(mergeInfo), VertexIndexA1(mergeInfo), VertexIndexA2(mergeInfo));
         }
         else if (mergeInfo.triangleCount == 2)
         {
             orderer.AddTriangle(triangles, ref triangleIndex, VertexIndexA0(mergeInfo), VertexIndexA1(mergeInfo), VertexIndexA2(mergeInfo));
             orderer.AddTriangle(triangles, ref triangleIndex, VertexIndexB0(mergeInfo), VertexIndexB1(mergeInfo), VertexIndexB2(mergeInfo));
         }
     }
     else
     {
         TopCellMesher.CalculateIndices(orderer, config, triangleIndex, tris, bl, br, tr, tl, triangles);
     }
 }