Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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;
            }
        }