For deferred face addition.
예제 #1
0
        private DeferredFace MakeDeferredFace(ConvexFaceInternal face, int faceIndex, ConvexFaceInternal pivot, int pivotIndex, ConvexFaceInternal oldFace)
        {
            DeferredFace deferredFace = this.ObjectManager.GetDeferredFace();

            deferredFace.Face       = face;
            deferredFace.FaceIndex  = faceIndex;
            deferredFace.Pivot      = pivot;
            deferredFace.PivotIndex = pivotIndex;
            deferredFace.OldFace    = oldFace;
            return(deferredFace);
        }
예제 #2
0
 private void CommitCone()
 {
     for (int i = 0; i < ConeFaceBuffer.Count; i++)
     {
         DeferredFace       deferredFace = ConeFaceBuffer[i];
         ConvexFaceInternal face         = deferredFace.Face;
         ConvexFaceInternal pivot        = deferredFace.Pivot;
         ConvexFaceInternal oldFace      = deferredFace.OldFace;
         int faceIndex = deferredFace.FaceIndex;
         face.AdjacentFaces[faceIndex] = pivot.Index;
         pivot.AdjacentFaces[deferredFace.PivotIndex] = face.Index;
         for (int j = 0; j < NumOfDimensions; j++)
         {
             if (j != faceIndex)
             {
                 FaceConnector connector = ObjectManager.GetConnector();
                 connector.Update(face, j, NumOfDimensions);
                 ConnectFace(connector);
             }
         }
         if (pivot.VerticesBeyond.Count == 0)
         {
             FindBeyondVertices(face, oldFace.VerticesBeyond);
         }
         else if (pivot.VerticesBeyond.Count < oldFace.VerticesBeyond.Count)
         {
             FindBeyondVertices(face, pivot.VerticesBeyond, oldFace.VerticesBeyond);
         }
         else
         {
             FindBeyondVertices(face, oldFace.VerticesBeyond, pivot.VerticesBeyond);
         }
         if (face.VerticesBeyond.Count == 0)
         {
             ConvexFaces.Add(face.Index);
             UnprocessedFaces.Remove(face);
             ObjectManager.DepositVertexBuffer(face.VerticesBeyond);
             face.VerticesBeyond = EmptyBuffer;
         }
         else
         {
             UnprocessedFaces.Add(face);
         }
         ObjectManager.DepositDeferredFace(deferredFace);
     }
     for (int k = 0; k < AffectedFaceBuffer.Count; k++)
     {
         int num = AffectedFaceBuffer[k];
         UnprocessedFaces.Remove(FacePool[num]);
         ObjectManager.DepositFace(num);
     }
 }
예제 #3
0
파일: ObjectManager.cs 프로젝트: fecca/Code
 public void DepositDeferredFace(DeferredFace face)
 {
     DeferredFaceStack.Push(face);
 }
예제 #4
0
 /// <summary>
 /// Deposit the deferred face.
 /// </summary>
 /// <param name="face">The face.</param>
 public void DepositDeferredFace(DeferredFace face)
 {
     DeferredFaceStack.Push(face);
 }
예제 #5
0
        private void CommitCone()
        {
            int num = 0;

            while (num < this.ConeFaceBuffer.Count)
            {
                DeferredFace       face      = this.ConeFaceBuffer[num];
                ConvexFaceInternal internal2 = face.Face;
                ConvexFaceInternal pivot     = face.Pivot;
                ConvexFaceInternal oldFace   = face.OldFace;
                int faceIndex = face.FaceIndex;
                internal2.AdjacentFaces[faceIndex]   = pivot.Index;
                pivot.AdjacentFaces[face.PivotIndex] = internal2.Index;
                int edgeIndex = 0;
                while (true)
                {
                    if (edgeIndex >= this.Dimension)
                    {
                        if (pivot.VerticesBeyond.Count == 0)
                        {
                            this.FindBeyondVertices(internal2, oldFace.VerticesBeyond);
                        }
                        else if (pivot.VerticesBeyond.Count < oldFace.VerticesBeyond.Count)
                        {
                            this.FindBeyondVertices(internal2, pivot.VerticesBeyond, oldFace.VerticesBeyond);
                        }
                        else
                        {
                            this.FindBeyondVertices(internal2, oldFace.VerticesBeyond, pivot.VerticesBeyond);
                        }
                        if (internal2.VerticesBeyond.Count != 0)
                        {
                            this.UnprocessedFaces.Add(internal2);
                        }
                        else
                        {
                            this.ConvexFaces.Add(internal2.Index);
                            this.UnprocessedFaces.Remove(internal2);
                            this.ObjectManager.DepositVertexBuffer(internal2.VerticesBeyond);
                            internal2.VerticesBeyond = this.EmptyBuffer;
                        }
                        this.ObjectManager.DepositDeferredFace(face);
                        num++;
                        break;
                    }
                    if (edgeIndex != faceIndex)
                    {
                        FaceConnector connector = this.ObjectManager.GetConnector();
                        connector.Update(internal2, edgeIndex, this.Dimension);
                        this.ConnectFace(connector);
                    }
                    edgeIndex++;
                }
            }
            for (int i = 0; i < this.AffectedFaceBuffer.Count; i++)
            {
                int index = this.AffectedFaceBuffer[i];
                this.UnprocessedFaces.Remove(this.FacePool[index]);
                this.ObjectManager.DepositFace(index);
            }
        }