Example #1
0
        private static void NativeWindow_Render(object sender, NativeWindowEventArgs e)
        {
            NativeWindow nativeWindow = (NativeWindow)sender;

            Gl.Viewport(0, 0, (int)nativeWindow.Width, (int)nativeWindow.Height);
            Gl.Clear(ClearBufferMask.ColorBufferBit);

            Gl.UseProgram(_CubeEdgeProgram);

            // Compute MVP
            PerspectiveProjectionMatrix proj = new PerspectiveProjectionMatrix(60.0f, (float)nativeWindow.Width / nativeWindow.Height, 0.5f, 1e6f);
            ModelMatrix view  = new ModelMatrix();
            ModelMatrix model = new ModelMatrix();

            model.RotateY(_Angle);
            model.RotateZ(_Angle);

            view.LookAtTarget(Vertex3f.One * 7.0f, Vertex3f.Zero, Vertex3f.UnitY);

            Gl.BindVertexArray(_CubeVao);

            Gl.UniformMatrix4(_CubeEdgeProgram_Location_uMVP, 1, false, (proj * view * model).ToArray());

            foreach (float scale4d in new float[] { 64.0f, 32.0f, 16.0f, 8.0f, 4.0f, 2.0f, 1.0f, 0.5f, 0.25f, 0.125f })
            {
                Gl.Uniform1(_CubeEdgeProgram_Location_uScale4D, scale4d * _Zooom);
                Gl.Uniform4(_CubeEdgeProgram_Location_uColor, 0.0f, 0.3f, 1.0f, Math.Min(1.0f, scale4d * _Zooom / 2.0f));
                Gl.DrawElements(PrimitiveType.Lines, _CubeEdges.Length, DrawElementsType.UnsignedShort, IntPtr.Zero);
            }

            _Angle += 360.0f / (25.0f * 5);
            _Zooom -= 0.025f;

            if (_Zooom < 0.5f)
            {
                _Zooom = 1.0f;
            }

            // Save PNG frame
            if (_FrameNo < 125)
            {
                using (Bitmap bitmap = new Bitmap((int)nativeWindow.Width, (int)nativeWindow.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb)) {
                    BitmapData bitmapData = bitmap.LockBits(new Rectangle(Point.Empty, bitmap.Size), ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

                    Gl.ReadPixels(0, 0, (int)nativeWindow.Width, (int)nativeWindow.Height, OpenGL.PixelFormat.Bgr, PixelType.UnsignedByte, bitmapData.Scan0);

                    bitmap.Save(String.Format("Frame_{0:D3}.png", _FrameNo++));
                }
            }
        }
Example #2
0
        // Init Window
        private void NativeWindow_ContextCreated(object sender, NativeWindowEventArgs e)
        {
            OpenGL.CoreUI.NativeWindow nativeWindow = (OpenGL.CoreUI.NativeWindow)sender;

            Gl.ReadBuffer(ReadBufferMode.Back);
            Gl.ClearColor(0.0f, 0.0f, 0.0f, 1.0f);

            Gl.Enable(EnableCap.Blend);
            Gl.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha);

            Gl.Enable(EnableCap.LineSmooth);
            Gl.Hint(HintTarget.LineSmoothHint, HintMode.Nicest);

            viewer.init(zedCamera.GetCalibrationParameters().leftCam);
        }
Example #3
0
        private static void NativeWindow_ContextCreated(object sender, NativeWindowEventArgs e)
        {
            NativeWindow nativeWindow = (NativeWindow)sender;

            Gl.ReadBuffer(ReadBufferMode.Back);

            Gl.ClearColor(1.0f, 1.0f, 1.0f, 1.0f);

            Gl.Enable(EnableCap.Blend);
            Gl.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha);

            Gl.LineWidth(2.5f);

            CreateResources();
        }
        private void NativeWindow_ContextCreated(object sender, NativeWindowEventArgs e)
        {
            lastRenderTime            = DateTime.Now.Ticks;
            SparrowSharp.NativeWindow = this;
            SparrowSharp.Start(_width, _height, _width, _height, _rootClass);

            //SparrowSharp.MouseIconChange += OnCursorChange;

            _nativeWindow.MouseDown += OnMouseButtonDown;
            _nativeWindow.MouseUp   += OnMouseButtonUp;
            _nativeWindow.MouseMove += OnMouseMove;


            _nativeWindow.Render += Control_Render;
            _nativeWindow.Resize += OnResize;
        }
Example #5
0
        // Render loop
        private void NativeWindow_Render(object sender, NativeWindowEventArgs e)
        {
            OpenGL.CoreUI.NativeWindow nativeWindow = (OpenGL.CoreUI.NativeWindow)sender;
            Gl.Viewport(0, 0, (int)nativeWindow.Width, (int)nativeWindow.Height);
            Gl.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

            if (viewer.isAvailable() && zedCamera.Grab(ref runtimeParameters) == ERROR_CODE.SUCCESS)
            {
                if (point_cloud.IsInit())
                {
                    // Retrieve left image
                    zedCamera.RetrieveMeasure(point_cloud, sl.MEASURE.XYZRGBA, sl.MEM.CPU, res);
                    zedCamera.GetPosition(ref cam_pose, REFERENCE_FRAME.WORLD);
                    //Update GL View
                    viewer.update(point_cloud, cam_pose);
                    viewer.render();
                }
            }
        }
Example #6
0
        private void Render(object sender, NativeWindowEventArgs e)
        {
            if (!initialized)
            {
                InitServices();
                InitManagers();
                InitScene();

                // Setup complete - broadcast the game started event
                Subject.Notify(NotifyType.SceneReady, new GenericNotifyArgs(this));
                StartThreads();
                initialized = true;
            }
            Gl.Enable(EnableCap.FramebufferSrgb);
            RenderManager.Instance.Run();
            Gl.Disable(EnableCap.FramebufferSrgb);
            ImGuiManager.Instance.Run();
            Gl.Enable(EnableCap.FramebufferSrgb);
        }
Example #7
0
        // Render loop
        private void NativeWindow_Render(object sender, NativeWindowEventArgs e)
        {
            OpenGL.CoreUI.NativeWindow nativeWindow = (OpenGL.CoreUI.NativeWindow)sender;
            Gl.Viewport(0, 0, (int)nativeWindow.Width, (int)nativeWindow.Height);
            Gl.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

            if (viewer.isAvailable() && zedCamera.Grab(ref runtimeParameters) == ERROR_CODE.SUCCESS)
            {
                trackingState = zedCamera.GetPosition(ref cam_pose, REFERENCE_FRAME.WORLD);

                if (trackingState == POSITIONAL_TRACKING_STATE.OK && timer % 30 == 0)
                {
                    Console.WriteLine("Translation : " + cam_pose.translation + ", Rotation : " + cam_pose.rotation);
                }
                //Update GL View
                viewer.updateData(cam_pose);
                viewer.render();
                timer++;
            }
        }
Example #8
0
        private void ContextCreated(object sender, NativeWindowEventArgs e)
        {
            AttributeId[] attributes = null;

            _vao = new VertexArrayObject(true);
            {
                var texture = new TQTexture(File.ReadAllBytes("texture.tex"));
                _texture = new Texture(TextureTarget.Texture2d);
                _texture.Parameteri(TextureParameterName.TextureWrapS, TextureWrapMode.Repeat);
                _texture.Parameteri(TextureParameterName.TextureWrapT, TextureWrapMode.Repeat);
                _texture.Parameteri(TextureParameterName.TextureMinFilter, TextureMinFilter.Linear);
                _texture.Parameteri(TextureParameterName.TextureMagFilter, TextureMagFilter.Linear);
                foreach (var frame in texture)
                {
                    var            dds = new DDS.DDS(frame.Data);
                    InternalFormat internalFormat;
                    if (dds.Header.Capabilities.HasFlag(Capabilities.Complex))
                    {
                        switch (dds.Header.PixelFormat.FourCC)
                        {
                        case "DXT5": internalFormat = InternalFormat.CompressedRgbaS3tcDxt5Ext; break;

                        default: throw new NotImplementedException();
                        }
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }

                    _texture.Storage2D((int)dds.Header.MipmapCount, internalFormat, (int)dds.Header.Width, (int)dds.Header.Height);
                    foreach (var layer in dds)
                    {
                        int level = 0;
                        foreach (var mip in layer)
                        {
                            unsafe
                            {
                                fixed(byte *ptr = mip.Data)
                                {
                                    _texture.CompressedSubImage2D(
                                        level++,
                                        internalFormat,
                                        xOffset: 0,
                                        yOffset: 0,
                                        width: (int)Math.Max(1, (dds.Header.Width * 2) >> level),
                                        height: (int)Math.Max(1, (dds.Header.Height * 2) >> level),
                                        data: mip.Data);
                                    Gl.CheckErrors();
                                }
                            }
                        }
                        break; //TODO: Further layers.
                    }
                    break;     //TODO: Further frames.
                }
            }

            var mesh = new Mesh.Mesh(File.ReadAllBytes("mesh.msh"));

            foreach (var part in mesh)
            {
                if (part.Is(out VertexBuffer vertexBuffer))
                {
                    Console.Write("Loading VBO...");
                    var vbo = new Buffer(true);
                    vbo.BufferData(vertexBuffer.Buffer, BufferUsage.StaticDraw);
                    _vao.VertexBuffer(0, vbo, IntPtr.Zero, vertexBuffer.Header.Stride);
                    Console.Write(" OK!");
                    attributes = vertexBuffer.Attributes.ToArray();
                    Console.Write($" (also got {attributes.Length} attributes)");
                    _vertexCount = vertexBuffer.Header.VertexCount;
                    Console.WriteLine($" (also got vertex count {_vertexCount})");
                }
                else if (part.Is(out Shaders shaders))
                {
                    foreach (var shader in shaders)
                    {
                        {
                            Console.Write($"Sort of loading {shader.FileName}...");
                            using (var vertexShader = new Shader(ShaderType.VertexShader, File.ReadAllText($"{shader.FileName}.vertex.glsl")))
                                using (var fragmentShader = new Shader(ShaderType.FragmentShader, File.ReadAllText($"{shader.FileName}.fragment.glsl")))
                                { _program = new ShaderProgram(vertexShader, fragmentShader); }
                            _program.Link();
                            Console.WriteLine(" OK!");
                        }
                        {
                            Console.Write($"Setting up attibutes...");
                            var offset = 0u;
                            foreach (var attribute in attributes)
                            {
                                switch (attribute)
                                {
                                case AttributeId.Position: SetUpAttribute(_vao, _program, "position", 3, VertexAttribType.Float, normalized: false, offset, bindingIndex: 0); break;

                                case AttributeId.Normal: SetUpAttribute(_vao, _program, "normal", 3, VertexAttribType.Float, normalized: true, offset, bindingIndex: 0); break;

                                case AttributeId.Tangent: SetUpAttribute(_vao, _program, "tangent", 3, VertexAttribType.Float, normalized: true, offset, bindingIndex: 0); break;

                                case AttributeId.Bitangent: SetUpAttribute(_vao, _program, "bitangent", 3, VertexAttribType.Float, normalized: true, offset, bindingIndex: 0); break;

                                case AttributeId.UV: SetUpAttribute(_vao, _program, "uv", 2, VertexAttribType.Float, normalized: false, offset, bindingIndex: 0); break;

                                case AttributeId.Weights: SetUpAttribute(_vao, _program, "weights", 4, VertexAttribType.Float, normalized: false, offset, bindingIndex: 0); break;

                                case AttributeId.Bones: SetUpAttribute(_vao, _program, "bones", 4, VertexAttribType.Byte, normalized: false, offset, bindingIndex: 0); break;

                                case AttributeId.Bytes: SetUpAttribute(_vao, _program, "bytes", 4, VertexAttribType.UnsignedByte, normalized: false, offset, bindingIndex: 0); break;
                                }
                                offset += GetAttributeSize(attribute);
                            }
                            Console.WriteLine(" OK!");
                        }
                        {
                            Console.Write($"Setting up uniforms...");
                            if (_program.TryGetUniformLocation("transformation", out var transformationUniform))
                            {
                                var matrix = new Matrix4x4(
                                    .5f, 0, 0, 0,
                                    0, .5f, 0, 0,
                                    0, 0, .5f, 0,
                                    0, -.7f, 0, 1
                                    );
                                _program.UniformMatrix4f(transformationUniform, transpose: false, in matrix);
                            }
                            else
                            {
                                throw new NotImplementedException();
                            }
                            Console.WriteLine(" OK!");
                        }
                    }
                }
                else if (part.Is(out IndexBuffer indexBuffer))
                {
                    Console.Write("Loading IBO...");
                    var ibo = new Buffer(true);
                    ibo.BufferData(indexBuffer.TriangleIndices, BufferUsage.StaticDraw);
                    _vao.ElementBuffer(ibo);
                    Console.WriteLine(" OK!");

                    var drawRanges = new List <(int, int)>();
                    foreach (var drawCall in indexBuffer)
                    {
                        drawRanges.Add((drawCall.Common.StartFaceIndex, drawCall.Common.FaceCount));
                    }
                    _drawRanges = drawRanges.ToArray();
                }
                else if (part.Is(out Bones bones))
                {
                    _boneVao = new VertexArrayObject(true);
                    Console.Write("Loading Bones...");
                    _boneMatrices  = new Matrix4x4[bones.Count];
                    _bonePositions = new Vector3[bones.Count];
                    for (int i = 0; i < _boneMatrices.Length; i++)
                    {
                        _boneMatrices[i] = Matrix4x4.Identity;
                    }

                    foreach (var bone in bones)
                    {
                        var i            = bone.Index;
                        var position     = new Vector4(bone.Position, 1);
                        var bonePosition = Vector4.Transform(position, _boneMatrices[i]);
                        _bonePositions[i] = new Vector3(bonePosition.X, bonePosition.Y, bonePosition.Z);
                        var boneMatrix = new Matrix4x4(
                            bone.Axes[0], bone.Axes[1], bone.Axes[2], 0,
                            bone.Axes[3], bone.Axes[4], bone.Axes[5], 0,
                            bone.Axes[6], bone.Axes[7], bone.Axes[8], 0,
                            bone.Position.X, bone.Position.Y, bone.Position.Z, 1
                            );
                        _boneMatrices[i] = boneMatrix * _boneMatrices[i];
                        foreach (var childBone in bone)
                        {
                            _boneMatrices[childBone.Index] = _boneMatrices[i];
                        }
                    }

                    var            boneVbo     = new Buffer(true);
                    Span <Vector3> boneVboData = (from p in _bonePositions select new Vector3(p.X / 2, p.Y / 2 - .7f, p.Z / 2)).ToArray().AsSpan();
                    _boneVao.VertexBuffer(0, boneVbo, IntPtr.Zero, 3 * sizeof(float));
                    Gl.CheckErrors();
                    boneVbo.BufferData(boneVboData, BufferUsage.StaticDraw);
                    Gl.CheckErrors();

                    //TODO: LINQ it!
                    var boneIbo = new Buffer(true);
                    Gl.CheckErrors();
                    var boneIboEntries = new List <(int, int)>();
                    foreach (var parent in bones)
                    {
                        foreach (var child in parent)
                        {
                            boneIboEntries.Add((parent.Index, child.Index));
                        }
                    }
                    boneIbo.BufferData(boneIboEntries.SelectMany(x => new[] { (ushort)x.Item1, (ushort)x.Item2 }).ToArray().AsSpan(), BufferUsage.StaticDraw);
                    _boneVao.ElementBuffer(boneIbo);
                    Gl.CheckErrors();
                    _boneLinkCount = boneIboEntries.Count;

                    using (var vertexShader = new Shader(ShaderType.VertexShader, File.ReadAllText("bones.vertex.glsl")))
                        using (var fragmentShader = new Shader(ShaderType.FragmentShader, File.ReadAllText("bones.fragment.glsl")))
                        { _boneProgram = new ShaderProgram(vertexShader, fragmentShader); }
                    _boneProgram.Link();
                    Console.WriteLine(" OK!");

                    SetUpAttribute(_boneVao, _boneProgram, "position", 3, VertexAttribType.Float, normalized: false, relativeOffset: 0, bindingIndex: 0);

                    Gl.CheckErrors();
                }
            }
        }
Example #9
0
        private void NativeWindow_Render(object sender, NativeWindowEventArgs e)
        {
            float head_height;
            float feet_y_min;
            float delta;

            using (var lastFrame = visualizerData.TakeFrameWithOwnership())
            {
                if (lastFrame == null)
                {
                    return;
                }

                NativeWindow nativeWindow = (NativeWindow)sender;

                Gl.Viewport(0, 0, (int)nativeWindow.Width, (int)nativeWindow.Height);
                Gl.Clear(ClearBufferMask.ColorBufferBit);

                // Update model/view/projective matrices in shader
                var proj = Matrix4x4.CreatePerspectiveFieldOfView(ToRadians(65.0f), (float)nativeWindow.Width / nativeWindow.Height, 0.1f, 150.0f);
                var view = Matrix4x4.CreateLookAt(Vector3.Zero, Vector3.UnitZ, -Vector3.UnitY);

                SphereRenderer.View       = view;
                SphereRenderer.Projection = proj;

                CylinderRenderer.View       = view;
                CylinderRenderer.Projection = proj;

                //PointCloudRenderer.View = view;
                //PointCloudRenderer.Projection = proj;

                //PointCloud.ComputePointCloud(lastFrame.Capture.Depth, ref pointCloud);
                //PointCloudRenderer.Render(pointCloud, new Vector4(1, 1, 1, 1));

                if (lastFrame.NumberOfBodies > 0 && !TrackingAnybody)
                {
                    Console.WriteLine("+++++++++++++++++ TRACKING SOMEBODY ++++++++++++++++");
                    TrackingAnybody = true;
                }
                if (lastFrame.NumberOfBodies == 0 && TrackingAnybody)
                {
                    Console.WriteLine("-----------------  NOBODY TRACKED  -----------------");
                    TrackingAnybody = false;
                }

                for (uint i = 0; i < lastFrame.NumberOfBodies; ++i)
                {
                    var skeleton  = lastFrame.GetBodySkeleton(i);
                    var bodyId    = lastFrame.GetBodyId(i);
                    var bodyColor = BodyColors.GetColorAsVector(bodyId);

                    switch (Status)
                    {
                    case STATUS_INIT:
                    case STATUS_RUNNING:
                    case STATUS_CALIBRATION_PROCESSING:

                        break;

                    case STATUS_CALIBRATION_ACQUIRING:
                        LeftHand_Kinect_PA.AddPoint(
                            skeleton.GetJoint(JointId.HandLeft).Position.X,
                            skeleton.GetJoint(JointId.HandLeft).Position.Y,
                            skeleton.GetJoint(JointId.HandLeft).Position.Z);

                        RightHand_Kinect_PA.AddPoint(
                            skeleton.GetJoint(JointId.HandRight).Position.X,
                            skeleton.GetJoint(JointId.HandRight).Position.Y,
                            skeleton.GetJoint(JointId.HandRight).Position.Z);

                        //LeftHand_Hololens_PA.AddPoint(LH_Hololens_pos.X, LH_Hololens_pos.Y, LH_Hololens_pos.Z);
                        //RightHand_Hololens_PA.AddPoint(RH_Hololens_pos.X, RH_Hololens_pos.Y, RH_Hololens_pos.Z);

                        break;
                    }


                    if (true)
                    {
                        if (true)
                        {
                            data_to_send[0] = skeleton.GetJoint(JointId.FootLeft).Position.X;
                            data_to_send[1] = GetKinectHeight(skeleton.GetJoint(JointId.FootLeft).Position.Y);
                            data_to_send[2] = skeleton.GetJoint(JointId.FootLeft).Position.Z;

                            data_to_send[3] = skeleton.GetJoint(JointId.FootRight).Position.X;
                            data_to_send[4] = GetKinectHeight(skeleton.GetJoint(JointId.FootRight).Position.Y);
                            data_to_send[5] = skeleton.GetJoint(JointId.FootRight).Position.Z;
                        }
                        else
                        {
                            data_to_send[0] = skeleton.GetJoint(JointId.HandLeft).Position.X;
                            data_to_send[1] = skeleton.GetJoint(JointId.HandLeft).Position.Y;
                            data_to_send[2] = skeleton.GetJoint(JointId.HandLeft).Position.Z;

                            data_to_send[3] = skeleton.GetJoint(JointId.HandRight).Position.X;
                            data_to_send[4] = skeleton.GetJoint(JointId.HandRight).Position.Y;
                            data_to_send[5] = skeleton.GetJoint(JointId.HandRight).Position.Z;
                        }
                    }
                    else
                    {
                        //DEBUG

                        data_to_send[0] = 1.0f;
                        data_to_send[1] = 2.0f;
                        data_to_send[2] = 3.0f;

                        data_to_send[3] = 4.0f;
                        data_to_send[4] = 5.0f;
                        data_to_send[5] = 6.0f;
                    }

                    head_height = GetKinectHeight(skeleton.GetJoint(JointId.Head).Position.Y);

                    feet_y_min = min(data_to_send[1], data_to_send[4]);
                    delta      = head_height - feet_y_min;

                    data_to_send[1] = (data_to_send[1] - feet_y_min) / delta;
                    data_to_send[4] = (data_to_send[4] - feet_y_min) / delta;

                    //data_to_send[1] /= head_height;
                    if (data_to_send[1] > 1.0f)
                    {
                        data_to_send[1] = 1.0f;
                    }
                    else
                    {
                        if (data_to_send[1] < 0)
                        {
                            data_to_send[1] = 0;
                        }
                    }

                    //data_to_send[4] /= head_height;
                    if (data_to_send[4] > 1.0f)
                    {
                        data_to_send[4] = 1.0f;
                    }
                    else
                    {
                        if (data_to_send[4] < 0)
                        {
                            data_to_send[4] = 0;
                        }
                    }

                    //unbias data
                    if (false)
                    {
                        if (true)
                        {
                            //unbias data subtracting the measures from the head's ones
                            feet_y_min = min(data_to_send[1], data_to_send[4]);
                            delta      = head_height - feet_y_min;

                            data_to_send[0] = skeleton.GetJoint(JointId.Head).Position.X - data_to_send[0];
                            data_to_send[1] = data_to_send[1] - feet_y_min;
                            data_to_send[2] = skeleton.GetJoint(JointId.Head).Position.Z - data_to_send[2];

                            data_to_send[3] = skeleton.GetJoint(JointId.Head).Position.X - data_to_send[3];
                            data_to_send[4] = head_height - data_to_send[4];
                            data_to_send[5] = skeleton.GetJoint(JointId.Head).Position.Z - data_to_send[5];

                            if (data_to_send[1] < 0)
                            {
                                data_to_send[1] = -data_to_send[1];
                            }

                            if (data_to_send[4] < 0)
                            {
                                data_to_send[4] = -data_to_send[4];
                            }

                            if (normalize_height && head_height > 0)
                            {
                                data_to_send[1] /= head_height;
                                if (data_to_send[1] > 1.0f)
                                {
                                    data_to_send[1] = 1.0f;
                                }
                                else
                                if (data_to_send[1] < 0)
                                {
                                    data_to_send[1] = 0;
                                }

                                data_to_send[4] /= head_height;
                                if (data_to_send[4] > 1.0f)
                                {
                                    data_to_send[4] = 1.0f;
                                }
                                else
                                if (data_to_send[4] < 0)
                                {
                                    data_to_send[4] = 0;
                                }
                            }
                        }
                        else
                        {
                            //unbias data subtracting the the head's measures from the actual ones
                            data_to_send[0] -= skeleton.GetJoint(JointId.Head).Position.X;
                            data_to_send[1] -= skeleton.GetJoint(JointId.Head).Position.Y;
                            data_to_send[2] -= skeleton.GetJoint(JointId.Head).Position.Z;

                            data_to_send[3] -= skeleton.GetJoint(JointId.Head).Position.X;
                            data_to_send[4] -= skeleton.GetJoint(JointId.Head).Position.Y;
                            data_to_send[5] -= skeleton.GetJoint(JointId.Head).Position.Z;
                        }
                    }

                    if (debug_print_sending_data_UDP)
                    {
                        Console.WriteLine("SENDING-> LH: " + data_to_send[0].ToString("0.00") + " " + data_to_send[1].ToString("0.00") + " " + data_to_send[2].ToString("0.00") +
                                          " --- RH: " + data_to_send[3].ToString("0.00") + " " + data_to_send[4].ToString("0.00") + " " + data_to_send[5].ToString("0.00") + " Head height = " + head_height.ToString("0.00"));
                    }

                    if (true)
                    {
                        SendPositions(data_to_send);
                    }

                    for (int jointId = 0; jointId < (int)JointId.Count; ++jointId)
                    {
                        if (jointId == (int)JointId.SpineNavel)
                        {
                            float f = skeleton.GetJoint(jointId).Position.X;
                            //SendFloat(f);
                        }

                        if (jointId == (int)JointId.HandRight || jointId == (int)JointId.HandLeft ||
                            jointId == (int)JointId.FootLeft || jointId == (int)JointId.FootRight ||
                            jointId == (int)JointId.SpineNavel)
                        {
                            var joint = skeleton.GetJoint(jointId);

                            // Render the joint as a sphere.
                            const float radius = 0.012f;
                            SphereRenderer.Render(joint.Position / 1000, radius, bodyColor);

                            if (false)
                            {
                                if (JointConnections.JointParent.TryGetValue((JointId)jointId, out JointId parentId))
                                {
                                    // Render a bone connecting this joint and its parent as a cylinder.
                                    CylinderRenderer.Render(joint.Position / 1000, skeleton.GetJoint((int)parentId).Position / 1000, bodyColor);
                                }
                            }
                        }
                    }
                }
            }
        }
Example #10
0
 private void ContextDestroyed(object sender, NativeWindowEventArgs e)
 {
     isRunning = false;
 }
Example #11
0
 private void Render(object sender, NativeWindowEventArgs e)
 {
     RenderToShadowMap();
     RenderToScreen();
     // imgui.Render();
 }
Example #12
0
        // Render loop
        private void NativeWindow_Render(object sender, NativeWindowEventArgs e)
        {
            OpenGL.CoreUI.NativeWindow nativeWindow = (OpenGL.CoreUI.NativeWindow)sender;
            Gl.Viewport(0, 0, (int)nativeWindow.Width, (int)nativeWindow.Height);
            Gl.Clear(ClearBufferMask.ColorBufferBit);

            ERROR_CODE err = ERROR_CODE.FAILURE;

            if (viewer.isAvailable() && zedCamera.Grab(ref runtimeParameters) == ERROR_CODE.SUCCESS)
            {
                if (zedMat.IsInit())
                {
                    // Retrieve left image
                    err = zedCamera.RetrieveImage(zedMat, sl.VIEW.LEFT, sl.MEM.CPU);
                    // Update pose data (used for projection of the mesh over the current image)
                    tracking_state = zedCamera.GetPosition(ref cam_pose);

                    if (mapping_activated)
                    {
                        mapping_state = zedCamera.GetSpatialMappingState();
                        if (timer % 60 == 0 && viewer.chunksUpdated() == true)
                        {
                            zedCamera.RequestSpatialMap();
                        }
                        if (zedCamera.GetMeshRequestStatus() == ERROR_CODE.SUCCESS && timer > 0)
                        {
                            /// MAP_TYPE == MESH
                            if (CREATE_MESH)
                            {
                                //Retrieves data for mesh visualization only (vertices + triangles);
                                zedCamera.RetrieveChunks(ref mesh);

                                var chunks = new List <Chunk>(mesh.chunks.Values);
                                viewer.updateData(chunks);
                            }

                            /// MAP_TYPE == FUSED_POINT_CLOUD
                            else
                            {
                                zedCamera.RetrieveSpatialMap(ref fusedPointCloud);
                                viewer.updateData(fusedPointCloud.vertices);
                            }
                        }
                    }

                    bool change_state = viewer.updateImageAndState(zedMat, cam_pose, tracking_state, mapping_state);

                    if (change_state)
                    {
                        if (!mapping_activated)
                        {
                            Quaternion quat = Quaternion.Identity; Vector3 vec = Vector3.Zero;
                            zedCamera.ResetPositionalTracking(quat, vec);

                            zedCamera.EnableSpatialMapping(ref spatialMappingParameters);

                            Console.WriteLine("Hit SPACE BAR to stop spatial mapping...");
                            // Clear previous Mesh data
                            viewer.clearCurrentMesh();

                            mapping_activated = true;
                        }
                        else
                        {
                            // Filter the mesh (remove unnecessary vertices and faces)
                            if (CREATE_MESH)
                            {
                                zedCamera.ExtractWholeSpatialMap();
                                zedCamera.FilterMesh(MESH_FILTER.MEDIUM, ref mesh);
                            }

                            if (CREATE_MESH && spatialMappingParameters.saveTexture)
                            {
                                zedCamera.ApplyTexture(ref mesh);
                            }

                            bool   error_save = false;
                            string saveName   = "";
                            //Save mesh as obj file
                            if (CREATE_MESH)
                            {
                                saveName   = "mesh_gen.obj";
                                error_save = zedCamera.SaveMesh(saveName, MESH_FILE_FORMAT.OBJ);
                            }
                            else
                            {
                                saveName   = "point_cloud.ply";
                                error_save = zedCamera.SavePointCloud(saveName, MESH_FILE_FORMAT.PLY);
                            }


                            if (error_save)
                            {
                                Console.WriteLine("Mesh saved under: " + saveName);
                            }
                            else
                            {
                                Console.WriteLine("Failed to save the mesh under: " + saveName);
                            }

                            mapping_state     = SPATIAL_MAPPING_STATE.NOT_ENABLED;
                            mapping_activated = false;
                            zedCamera.DisableSpatialMapping();

                            Console.WriteLine("Hit SPACE BAR to start spatial mapping...");
                        }
                    }
                    timer++;
                    viewer.render();
                }
            }
        }
Example #13
0
        private void NativeWindow_Render(object sender, NativeWindowEventArgs e)
        {
            using (var lastFrame = visualizerData.TakeFrameWithOwnership())
            {
                if (lastFrame == null)
                {
                    return;
                }

                NativeWindow nativeWindow = (NativeWindow)sender;

                Gl.Viewport(0, 0, (int)nativeWindow.Width, (int)nativeWindow.Height);
                Gl.Clear(ClearBufferMask.ColorBufferBit);

                // Update model/view/projective matrices in shader
                var proj = Matrix4x4.CreatePerspectiveFieldOfView(ToRadians(65.0f), (float)nativeWindow.Width / nativeWindow.Height, 0.1f, 150.0f);
                var view = Matrix4x4.CreateLookAt(Vector3.Zero, Vector3.UnitZ, -Vector3.UnitY);

                SphereRenderer.View       = view;
                SphereRenderer.Projection = proj;

                CylinderRenderer.View       = view;
                CylinderRenderer.Projection = proj;

                PointCloudRenderer.View       = view;
                PointCloudRenderer.Projection = proj;

                PointCloud.ComputePointCloud(lastFrame.Capture.Depth, ref pointCloud);
                PointCloudRenderer.Render(pointCloud, new Vector4(1, 1, 1, 1));
                Vector3 rightHand = Vector3.Zero;
                for (uint i = 0; i < lastFrame.NumberOfBodies; ++i)
                {
                    var skeleton  = lastFrame.GetBodySkeleton(i);
                    var bodyId    = lastFrame.GetBodyId(i);
                    var bodyColor = BodyColors.GetColorAsVector(bodyId);

                    for (int jointId = 0; jointId < (int)JointId.Count; ++jointId)
                    {
                        var joint = skeleton.GetJoint(jointId);

                        if (jointId == (int)JointId.HandRight)
                        {
                            if (pullPoint)
                            {
                                if (rightHand == Vector3.Zero)
                                {
                                    rightHand = joint.Position;
                                }
                                else
                                {
                                    if (Math.Abs(Vector3.Distance(rightHand, Vector3.Zero)) > Math.Abs(Vector3.Distance(joint.Position, Vector3.Zero)))
                                    {
                                        rightHand = joint.Position;
                                    }
                                }
                            }
                            // Console.WriteLine($"Right Hand Found X:{joint.Position.X} Y:{joint.Position.Y} Z:{joint.Position.Z} ");
                        }

                        // Render the joint as a sphere.
                        const float radius = 0.024f;
                        SphereRenderer.Render(joint.Position / 1000, radius, bodyColor);

                        if (JointConnections.JointParent.TryGetValue((JointId)jointId, out JointId parentId))
                        {
                            // Render a bone connecting this joint and its parent as a cylinder.
                            CylinderRenderer.Render(joint.Position / 1000, skeleton.GetJoint((int)parentId).Position / 1000, bodyColor);
                        }
                    }
                }

                if (rightHand != Vector3.Zero)
                {
                    thePoint = rightHand;
                }
            }
        }
Example #14
0
    // Render loop
    private void NativeWindow_Render(object sender, NativeWindowEventArgs e)
    {
        OpenGL.CoreUI.NativeWindow nativeWindow = (OpenGL.CoreUI.NativeWindow)sender;
        Gl.Viewport(0, 0, (int)nativeWindow.Width, (int)nativeWindow.Height);
        Gl.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

        ERROR_CODE err = ERROR_CODE.FAILURE;

        if (viewer.isAvailable() && zedCamera.Grab(ref runtimeParameters) == ERROR_CODE.SUCCESS)
        {
            foreach (var it in obj_runtime_parameters.objectClassFilter)
            {
                obj_runtime_parameters.objectConfidenceThreshold[it] = detection_confidence;
            }

            // Retrieve Objects
            err = zedCamera.RetrieveObjects(ref objects, ref obj_runtime_parameters);

            if (err == ERROR_CODE.SUCCESS && objects.isNew != 0)
            {
                // Retrieve left image
                zedCamera.RetrieveMeasure(pointCloud, MEASURE.XYZRGBA, MEM.CPU, pcRes);
                zedCamera.GetPosition(ref camWorldPose, REFERENCE_FRAME.WORLD);
                zedCamera.GetPosition(ref camCameraPose, REFERENCE_FRAME.CAMERA);
                zedCamera.RetrieveImage(imageLeft, VIEW.LEFT, MEM.CPU, displayRes);

                bool update_render_view   = true;
                bool update_3d_view       = true;
                bool update_tracking_view = true;
                int  nbBatches            = 0;

                if (USE_BATCHING)
                {
                    List <ObjectsBatch> objectsBatch = new List <ObjectsBatch>();
                    zedCamera.UpdateObjectsBatch(out nbBatches);
                    for (int i = 0; i < nbBatches; i++)
                    {
                        ObjectsBatch obj_batch = new ObjectsBatch();
                        zedCamera.GetObjectsBatch(i, ref obj_batch);
                        objectsBatch.Add(obj_batch);
                    }
                    batchHandler.push(camCameraPose, camWorldPose, imageLeft, pointCloud, ref objectsBatch);
                    batchHandler.pop(ref camCameraPose, ref camWorldPose, ref imageLeft, ref pointCloud, ref objects);
                    update_render_view = BatchSystemHandler.WITH_IMAGE_RETENTION ? Convert.ToBoolean(objects.isNew) : true;
                    update_3d_view     = BatchSystemHandler.WITH_IMAGE_RETENTION ? Convert.ToBoolean(objects.isNew) : true;
                }
                if (update_render_view)
                {
                    imageRenderLeft.CopyTo(imageLeftOcv);
                    TrackingViewer.render_2D(ref imageLeftOcv, imgScale, ref objects, true, isTrackingON);
                }
                if (update_3d_view)
                {
                    //Update GL View
                    viewer.update(pointCloud, objects, camWorldPose);
                    viewer.render();
                }
                if (update_tracking_view)
                {
                    trackViewGenerator.generate_view(ref objects, camCameraPose, ref imageTrackOcv, Convert.ToBoolean(objects.isTracked));
                }
            }

            if (isPlayback && zedCamera.GetSVOPosition() == zedCamera.GetSVONumberOfFrames())
            {
                return;
            }

            Cv2.ImShow(window_name, globalImage);
        }
    }
Example #15
0
 private void NativeWindowOnMouseLeave(object sender, NativeWindowEventArgs e)
 {
     ignoreSingleMouseDelta = true;
 }
Example #16
0
        public void NativeWindow_Render(object sender, NativeWindowEventArgs e)
        {
            using (var lastFrame = visualizerData.TakeFrameWithOwnership())
            {
                if (lastFrame == null)
                {
                    return;
                }
                NativeWindow nativeWindow = (NativeWindow)sender;

                // Gl.Viewport(0, 0, (int)nativeWindow.Width, (int)nativeWindow.Height);
                // Gl.Clear(ClearBufferMask.ColorBufferBit);

                // Update model/view/projective matrices in shader
                // var proj = Matrix4x4.CreatePerspectiveFieldOfView(ToRadians(65.0f), (float)nativeWindow.Width / nativeWindow.Height, 0.1f, 150.0f);
                // var view = Matrix4x4.CreateLookAt(Vector3.Zero, Vector3.UnitZ, -Vector3.UnitY);

                if (lastFrame.NumberOfBodies > 0)
                {
                    // SphereRenderer.View = view;
                    // SphereRenderer.Projection = proj;

                    // CylinderRenderer.View = view;
                    // CylinderRenderer.Projection = proj;

                    // PointCloudRenderer.View = view;
                    // PointCloudRenderer.Projection = proj;

                    // PointCloud.ComputePointCloud(lastFrame.Capture.Depth, ref pointCloud);
                    // PointCloudRenderer.Render(pointCloud, new Vector4(1, 1, 1, 1));
                    if (!IsHuman)
                    {
                        this.day   = DateTime.Now.ToString("yyyyMMdd");
                        this.scene = DateTime.Now.ToString("HHmmssfff");
                        string path = $@"C:\Users\gekka\temp\{this.day}\{this.scene}\depth";
                        Directory.CreateDirectory(path);
                        IsHuman = true;
                    }
                    for (uint i = 0; i < lastFrame.NumberOfBodies; ++i)
                    {
                        // System.Diagnostics.Debug.WriteLine(i);
                        DirectoryUtils.SafeCreateDirectory($@"C:\Users\gekka\temp\{this.day}\{this.scene}\{i}");
                        string filename  = $@"C:\Users\gekka\temp\{this.day}\{this.scene}\{i}\pos.csv";
                        var    append    = true;
                        var    skeleton  = lastFrame.GetBodySkeleton(i);
                        var    bodyId    = lastFrame.GetBodyId(i);
                        var    bodyColor = BodyColors.GetColorAsVector(bodyId);

                        using (var sw = new System.IO.StreamWriter(filename, append))
                        {
                            this.now = DateTime.Now.ToString("HHmmssfff");
                            sw.Write("{0}, ", this.now);
                            for (int jointId = 0; jointId < (int)JointId.Count; ++jointId)
                            {
                                var joint = skeleton.GetJoint(jointId);
                                sw.Write("{0}, {1}, {2},", joint.Position.X, joint.Position.Y, joint.Position.Z);

                                // GUI描画
                                // Render the joint as a sphere.
                                // const float radius = 0.024f;
                                // SphereRenderer.Render(joint.Position / 1000, radius, bodyColor);

                                // if (JointConnections.JointParent.TryGetValue((JointId)jointId, out JointId parentId))
                                // {
                                //     //Render a bone connecting this joint and its parent as a cylinder.
                                //     CylinderRenderer.Render(joint.Position / 1000, skeleton.GetJoint((int)parentId).Position / 1000, bodyColor);
                                // }
                            }
                            sw.Write("\r\n");
                        }
                    }
                }
                else
                {
                    IsHuman = false;
                }
            }
        }