public static void ReceiveVectors()
        {
            if (FakePosition)
            {
                if (SWatch == null)
                {
                    SWatch = Stopwatch.StartNew();
                }

                float   Rad = 300;
                float   TS  = 1000.0f;
                Vector3 Pos = new Vector3((float)Math.Sin(SWatch.ElapsedMilliseconds / TS) * Rad, 100, (float)Math.Cos(SWatch.ElapsedMilliseconds / TS) * Rad);

                MarkerA = MarkerB = MarkerC = Pos;
                return;
            }

            byte[] Bytes = ReceiveRaw();
            //Console.WriteLine(Bytes.Length);

            Vector3 *Vectors = stackalloc Vector3[3];

            Marshal.Copy(Bytes, 0, new IntPtr(Vectors), 3 * 3 * sizeof(float));             // Create vectors from bytes recieved over UDP

            Vector3 A = ABuffer.PushGetAverage(Vectors[0] + Program.OptotrakOffset);        // Method in CircularVectorBuffer class. This basically performs the running average filter
            Vector3 B = BBuffer.PushGetAverage(Vectors[1] + Program.OptotrakOffset);
            Vector3 C = CBuffer.PushGetAverage(Vectors[2] + Program.OptotrakOffset);

            if (IsVisible(A))             // Checks for marker visibility. If it is not the last value is used.
            {
                MarkerA = A.YZX();
            }

            if (IsVisible(B))
            {
                MarkerB = B.YZX();
            }

            if (IsVisible(C))
            {
                MarkerC = C.YZX();
            }


            if (!FirstItemReceived)
            {
                FirstItemReceived = true;
                Console.WriteLine(ConsoleColor.Yellow, "Receiving Optotrak data! {0}", GetPos());
            }
        }
        public static void ReceiveVectors()
        {
            if (FakePosition)
            {
                if (SWatch == null)
                {
                    SWatch = Stopwatch.StartNew();
                }

                float   Rad = 300;
                float   TS  = 1000.0f;
                Vector3 Pos = new Vector3((float)Math.Sin(SWatch.ElapsedMilliseconds / TS) * Rad, 100, (float)Math.Cos(SWatch.ElapsedMilliseconds / TS) * Rad);

                MarkerA = MarkerB = MarkerC = Pos;
                return;
            }

            byte[] Bytes = ReceiveRaw();
            //Console.WriteLine(Bytes.Length);

            Vector3 *Vectors = stackalloc Vector3[3];

            Marshal.Copy(Bytes, 0, new IntPtr(Vectors), 3 * 3 * sizeof(float));

            Vector3 A = ABuffer.PushGetAverage(Vectors[0] + Program.OptotrakOffset);
            Vector3 B = BBuffer.PushGetAverage(Vectors[1] + Program.OptotrakOffset);
            Vector3 C = CBuffer.PushGetAverage(Vectors[2] + Program.OptotrakOffset);

            if (IsVisible(A))
            {
                MarkerA = A.YZX();
            }

            if (IsVisible(B))
            {
                MarkerB = B.YZX();
            }

            if (IsVisible(C))
            {
                MarkerC = C.YZX();
            }


            if (!FirstItemReceived)
            {
                FirstItemReceived = true;
                Console.WriteLine(ConsoleColor.Yellow, "Receiving Optotrak data! {0}", GetPos());
            }
        }