public int[] CreateTriangles(MeshSettingsModel meshSettings) { int squareAmount = meshSettings.VertexSize; int colums = meshSettings.VertexSize + 1; int[] triangles = new int[squareAmount * squareAmount * 6]; for (int index = 0; index < squareAmount * squareAmount; index++) { int i = index / squareAmount; int j = index % squareAmount; CreateSquare(i * colums + j, colums, index * 6); } return(triangles); void CreateSquare(int vertexBaseIndex, int size, int trianglesBaseIndex) { triangles[trianglesBaseIndex] = vertexBaseIndex; triangles[trianglesBaseIndex + 1] = vertexBaseIndex + 1; triangles[trianglesBaseIndex + 2] = vertexBaseIndex + size; triangles[trianglesBaseIndex + 3] = vertexBaseIndex + 1; triangles[trianglesBaseIndex + 4] = vertexBaseIndex + 1 + size; triangles[trianglesBaseIndex + 5] = vertexBaseIndex + size; } }
Vector3[] IVertexCalculator.GetVerteces(MeshSettingsModel meshSettings) { float step = meshSettings.UnitsSize / meshSettings.VertexSize; float startPoint = (-meshSettings.UnitsSize * .5f); int rowPointsAmount = meshSettings.VertexSize + 1; Vector3[] points = new Vector3[rowPointsAmount * rowPointsAmount]; for (int index = 0; index < points.Length; index++) { int i = index / rowPointsAmount; int j = index % rowPointsAmount; float x = startPoint + step * i; float y = startPoint + step * j; points[index] = new Vector3(x, y, 0); } return(points); }
Vector3[] IVertexCalculator.GetVerteces(MeshSettingsModel meshSettings) { float step = meshSettings.UnitsSize / meshSettings.VertexSize; float startPoint = (-meshSettings.UnitsSize * .5f); int rowPointsAmount = meshSettings.VertexSize + 1; int length = rowPointsAmount * rowPointsAmount; NativeArray <float3> jobResult = new NativeArray <float3>(length, Allocator.TempJob); CalculatorJob jobData = new CalculatorJob { Step = step, StartPoint = startPoint, RowPointsAmount = rowPointsAmount, Result = jobResult }; JobHandle handle = jobData.Schedule(jobResult.Length, BatchCount); handle.Complete(); Vector3[] result = CreateArrayFrom(jobResult); jobResult.Dispose(); return(result); }