// Update is called once per frame
        void Update()
        {
            frame = rtClient.GetFrame();
            if (rtClient == null)
            {
                rtClient = RTClient.GetInstance();
            }
            if (rtClient.GetStreamingStatus() && !streaming)
            {
                InitiateMarkers();
                //InitiateCO();
                streaming = true;
            }
            if (!rtClient.GetStreamingStatus() && streaming)
            {
                streaming = false;
                InitiateMarkers();
                //InitiateCO();
            }

            markerData = rtClient.Markers;

            if (markerData == null && markerData.Count == 0)
            {
                return;
            }

            if (markers.Count != markerData.Count)
            {
                InitiateMarkers();
                //InitiateCO();
            }
            for (int i = 0; i < markerData.Count; i++)
            {
                if (markerData[i].Label == "a0")
                {
                    O = markerData[i].Position;
                    //markers[i].transform.position = VR_LL * O;
                }
                if (markerData[i].Label == "a1")
                {
                    A = markerData[i].Position;
                }
                if (markerData[i].Label == "b1")
                {
                    B = markerData[i].Position;
                }
                if (markerData[i].Label == "c1")
                {
                    C = markerData[i].Position;
                }
            }
            if (frame == 100)
            {
                if (RUN == true)
                {
                    a = Vector3.Cross(A - O, B - O);
                    a = a.normalized;
                    b = Vector3.Cross(A - O, a);
                    b = b.normalized;
                    c = Vector3.Cross(a, b);
                    c = c.normalized;
                    o = O;

                    R_LG.SetColumn(0, new Vector4(a.x, a.y, a.z, 0));
                    R_LG.SetColumn(1, new Vector4(b.x, b.y, b.z, 0));
                    R_LG.SetColumn(2, new Vector4(c.x, c.y, c.z, 0));
                    R_LG.SetColumn(3, new Vector4(O.x, O.y, O.z, 0));
                    //V_LG = V_LG.transpose;
                    //VR_LL = R_LG*V_LG.transpose;
                    VR_LL = V_LG * R_LG.transpose;

                    a4  = new Vector4(a.x, a.y, a.z, 0);
                    af4 = VR_LL * a4;
                    af  = VR_LL * a;
                    bf  = VR_LL * b;
                    cf  = VR_LL * c;
                    of  = VR_LL * o;


                    V_Lframe[0].transform.position = af;
                    V_Lframe[1].transform.position = bf;
                    V_Lframe[2].transform.position = cf;
                    V_Lframe[3].transform.position = of;
                    V_Lframe[0].SetActive(true);
                    V_Lframe[1].SetActive(true);
                    V_Lframe[2].SetActive(true);
                    V_Lframe[3].SetActive(true);
                    V_Lframe[0].GetComponent <Renderer>().enabled        = visibleMarkers;
                    V_Lframe[1].GetComponent <Renderer>().enabled        = visibleMarkers;
                    V_Lframe[2].GetComponent <Renderer>().enabled        = visibleMarkers;
                    V_Lframe[3].GetComponent <Renderer>().enabled        = visibleMarkers;
                    V_Lframe[0].GetComponent <Renderer>().material.color = new Vector4(0, 1, 0, 1);
                    V_Lframe[1].GetComponent <Renderer>().material.color = new Vector4(0, 0, 1, 1);
                    V_Lframe[2].GetComponent <Renderer>().material.color = new Vector4(1, 0, 0, 1);
                    V_Lframe[3].GetComponent <Renderer>().material.color = new Vector4(0, 0, 0, 1);

                    RUN = false;
                }
            }

            for (int i = 0; i < markerData.Count; i++)
            {
                if (markerData[i].Position.magnitude > 0)
                {
                    markers[i].name = markerData[i].Label;
                    markers[i].GetComponent <Renderer>().material.color = markerData[i].Color;
                    markers[i].transform.localPosition = VR_LL * markerData[i].Position; //+ (of - new Vector3(V_LG.m30, V_LG.m31, V_LG.m32));
                    markers[i].transform.localPosition = markers[i].transform.localPosition - new Vector3(of.x - V_LG[0, 3], of.y - V_LG[1, 3], of.z - V_LG[2, 3]);
                    markers[i].SetActive(true);
                    markers[i].GetComponent <Renderer>().enabled = visibleMarkers;
                    markers[i].transform.localScale = Vector3.one * markerScale;
                }
                else
                {
                    //hide markers if we cant find them.
                    markers[i].SetActive(false);
                }
            }
            //using (StreamWriter sw = new StreamWriter(writePath))
            //{
            //    sw.WriteLine(of.ToString());
            //    sw.WriteLine(V_LG.GetColumn(3).ToString());
            //    sw.WriteLine(V_LG.m30.ToString());
            //    sw.WriteLine(V_LG.m31.ToString());
            //    sw.WriteLine(V_LG.m32.ToString());


            //}
        }