//Continually requests frames that will be displayed in the live view window.
        private void updateWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            List <List <byte> >   lFramesRGB   = new List <List <byte> >();
            List <List <Single> > lFramesVerts = new List <List <Single> >();
            List <List <Body> >   lFramesBody  = new List <List <Body> >();

            BackgroundWorker worker = (BackgroundWorker)sender;

            while (!worker.CancellationPending)
            {
                Thread.Sleep(1);
                oServer.GetLatestFrame(lFramesRGB, lFramesVerts, lFramesBody);

                //Update the vertex and color lists that are common between this class and the OpenGLWindow.
                lock (lAllVertices)
                {
                    lAllVertices.Clear();
                    lAllColors.Clear();
                    lAllBodies.Clear();
                    lAllCameraPoses.Clear();

                    for (int i = 0; i < lFramesRGB.Count; i++)
                    {
                        /*
                         * if (frameCounter < 20)
                         * {
                         *  ExportFrame(lFramesVerts[i], lFramesRGB[i], lFramesBody[i]);
                         * }
                         */
                        lAllVertices.AddRange(lFramesVerts[i]);
                        lAllColors.AddRange(lFramesRGB[i]);
                        lAllBodies.AddRange(lFramesBody[i]);

                        var frame = LocalFrames[frameCounter % LocalFrames.Count];

                        frame.Vertices = Transformer.Apply3DTransform(frame.Vertices, Transformer.GetYRotationTransform(90));

                        lAllColors.AddRange(frame.RGB);
                        lAllVertices.AddRange(frame.Vertices);
                        lAllBodies.AddRange(frame.Bodies);

                        frameCounter++;
                    }

                    lAllCameraPoses.AddRange(oServer.lCameraPoses);
                }

                //Notes the fact that a new frame was downloaded, this is used to estimate the FPS.
                if (oOpenGLWindow != null)
                {
                    oOpenGLWindow.CloudUpdateTick();
                }
            }
        }
        //Continually requests frames that will be displayed in the live view window.
        private void updateWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            List <List <byte> >   lFramesRGB     = new List <List <byte> >();
            List <List <Single> > lFramesVerts   = new List <List <Single> >();
            List <List <short> >  lFramesNormals = new List <List <short> >();
            List <List <short> >  lFramesUVs     = new List <List <short> >();
            List <List <ushort> > lFramesIndices = new List <List <ushort> >();
            List <List <Body> >   lFramesBody    = new List <List <Body> >();

            BackgroundWorker worker = (BackgroundWorker)sender;

            while (!worker.CancellationPending)
            {
                Thread.Sleep(1);
                oServer.GetLatestFrame(lFramesRGB, lFramesVerts, lFramesNormals, lFramesUVs, lFramesIndices, lFramesBody);

                //Update the vertex and color lists that are common between this class and the OpenGLWindow.
                lock (lAllVertices)
                {
                    lAllVertices.Clear();
                    lAllNormals.Clear();
                    lAllUVs.Clear();
                    lAllIndices.Clear();
                    lAllColors.Clear();
                    lAllBodies.Clear();
                    lAllCameraPoses.Clear();

                    for (int i = 0; i < lFramesRGB.Count; i++)
                    {
                        lAllVertices.AddRange(lFramesVerts[i]);
                        lAllNormals.AddRange(lFramesNormals[i]);
                        lAllUVs.AddRange(lFramesUVs[i]);
                        lAllIndices.AddRange(lFramesIndices[i]);
                        lAllColors.AddRange(lFramesRGB[i]);
                        lAllBodies.AddRange(lFramesBody[i]);
                    }

                    lAllCameraPoses.AddRange(oServer.lCameraPoses);
                }

                //Notes the fact that a new frame was downloaded, this is used to estimate the FPS.
                if (oOpenGLWindow != null)
                {
                    oOpenGLWindow.CloudUpdateTick();
                }
            }
        }
Exemple #3
0
        //Continually requests frames that will be displayed in the live view window.
        private void updateWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            List <List <Body> > lFramesBody = new List <List <Body> >();

            VertexC4ubV3f[]  lFramesVerts     = new VertexC4ubV3f[0];
            int[]            lFramesTriangles = new int[0];
            BackgroundWorker worker           = (BackgroundWorker)sender;

            while (!worker.CancellationPending)
            {
                Thread.Sleep(1);

                //oServer.RequestLastFrames();
                oServer.CopyLatestFrames();
                oServer.RequestLastFrames();
                oServer.CorrectRadialDistortionsForDepthMaps();
                oServer.GenerateAndGetMesh(out lFramesVerts, lFramesBody, out lFramesTriangles);

                //Update the vertex and color lists that are common between this class and the OpenGLWindow.

                lock (lAllVerticesLock)
                {
                    //lAllVertices.Clear();
                    //lAllBodies.Clear();
                    //lAllTriangles.Clear();

                    int TotalVerticesCount             = 0;
                    int TotalTrianglesElementsCount    = 0;
                    int ActTotalTrianglesElementsCount = 0;
                    lAllVertices  = lFramesVerts;
                    lAllTriangles = lFramesTriangles;
                    //lAllVertices.AddRange(lFramesVerts);
                    //lAllTriangles.AddRange(lFramesTriangles);
                    for (int i = 0; i < lAllBodies.Count; i++)
                    {
                        lAllBodies.AddRange(lFramesBody[i]);

                        ActTotalTrianglesElementsCount = lAllTriangles.Count();
                        for (int v = TotalTrianglesElementsCount; v < ActTotalTrianglesElementsCount; v++)
                        {
                            lAllTriangles[v] += TotalVerticesCount / 3;
                        }

                        TotalTrianglesElementsCount = lAllTriangles.Count();
                        TotalVerticesCount          = lAllVertices.Count();
                    }
                }

                // adding camera poses is in separate range, because oServer.lCameraPoses "get" locks oClientSocketLock
                // that may cause deadlock when locking with lAllVertices
                List <AffineTransform> cameraPoses = oServer.lCameraPoses;

                lock (lAllVerticesLock)
                {
                    lAllCameraPoses.Clear();
                    lAllCameraPoses.AddRange(cameraPoses);
                }
                //Notes the fact that a new frame was downloaded, this is used to estimate the FPS.
                if (oOpenGLWindow != null)
                {
                    oOpenGLWindow.SetNewVerticesAndTriangles(lAllVertices, lAllTriangles);
                    oOpenGLWindow.CloudUpdateTick();
                }

                oTransferServer.updateMesh(lAllVertices, lAllTriangles);
            }
        }