private void CopyToMesh(TrackRenderData data, Vector3[] positions, Vector2[] uvs, Vector3[] normals, Color[] colors, int[] triangles, int firstVertex, int firstIndex, out int nextIndex, out int nextVertex) { int index = data.lastSectorIndex - data.sectorCount; if (index < 0) { index += data.maxSectorCountPerTrack; } float halfAlpha = 0.5f / ((float)(data.maxSectorCountPerTrack - data.firstSectorToHide)); Vector3 vector = new Vector3(); Vector3 vector2 = new Vector3(); for (int i = data.sectorCount; i > 0; i--) { Vector3 vector3; Vector3 vector4; Vector3 vector5; Vector3 vector6; float num4; float num5; TrackSector sector = data.sectors[index]; this.ComputeSectorVertices(sector, data.sectorCount, i, index, vector, vector2, out num4, out num5, out vector3, out vector4, out vector5, out vector6); this.CopySectorToMesh(data, vector3, vector4, vector5, vector6, sector.normal, i, positions, uvs, normals, colors, triangles, firstVertex, firstIndex, halfAlpha, num4, num5, sector.rotationCos); firstVertex += 4; firstIndex += 6; index = (index + 1) % data.maxSectorCountPerTrack; vector = vector3; vector2 = vector4; } nextIndex = firstIndex; nextVertex = firstVertex; }
private void ComputeSectorVertices(TrackSector sector, int count, int indexByOrder, int indexInBufer, Vector3 prev0, Vector3 prev1, out float startTextureWidth, out float endTextureWidth, out Vector3 v0, out Vector3 v1, out Vector3 v2, out Vector3 v3) { this.ComputeVerticesPosition(ref sector.endPosition, ref sector.endForward, ref sector.normal, sector.width, out v0, out v1); Vector3 vector3 = Vector3.Cross(sector.startForward, sector.normal).normalized *(sector.width / 2f); startTextureWidth = endTextureWidth = sector.textureWidth; if (!sector.contiguous || (indexByOrder >= (count - 1))) { this.ComputeVerticesPosition(ref sector.startPosition, ref sector.startForward, ref sector.normal, sector.width, out v2, out v3); } else { v2 = prev0; v3 = prev1; } }