Ejemplo n.º 1
0
        private warp_Triangle[] getTransparentQueue()
        {
            if (transparentQueue.Count == 0)
            {
                return(null);
            }
            IEnumerator enumerator = transparentQueue.GetEnumerator();

            warp_Triangle[] tri = new warp_Triangle[transparentQueue.Count];

            int id = 0;

            while (enumerator.MoveNext())
            {
                tri[id++] = (warp_Triangle)enumerator.Current;
            }

            return(sortTriangles(tri, 0, tri.GetLength(0) - 1));
        }
        private warp_Triangle[] getTransparentQueue()
        {
            if (transparentQueue.Count==0) return null;
            IEnumerator enumerator=transparentQueue.GetEnumerator();
            warp_Triangle[] tri=new warp_Triangle[transparentQueue.Count];

            int id=0;
            while (enumerator.MoveNext())
                tri[id++]=(warp_Triangle)enumerator.Current;

            return sortTriangles(tri,0,tri.GetLength(0)-1);
        }
Ejemplo n.º 3
0
		private warp_Triangle[] sortTriangles(warp_Triangle[] tri, int L, int R)
		{
            //FIX: Added Index bounds checking. (Was causing random exceptions) - Created by: X
            if (L < 0) L = 0;
            if (L > tri.GetLength(0)) L = tri.GetLength(0);
            if (R < 0) R = 0;
            if (R > tri.GetLength(0)) R = tri.GetLength(0);
            // - Created by: X

            float m = (tri[L].dist + tri[R].dist) / 2;
			int i=L;
			int j=R;
			warp_Triangle temp;

			do
			{
				while (tri[i].dist>m) i++;
				while (tri[j].dist<m) j--;

				if (i<=j)
				{
					temp=tri[i];
					tri[i]=tri[j];
					tri[j]=temp;
					i++;
					j--;
				}
			}
			while (j>=i);

			if (L<j) sortTriangles(tri,L,j);
			if (R>i) sortTriangles(tri,i,R);

			return tri;
		}