Beispiel #1
0
        public void render()
        {
            BBox_edges.pushToGPU();
            BBox_faces.pushToGPU();

            draw();
        }
Beispiel #2
0
        public void init(CameraParameters param)
        {
            Gl.Enable(EnableCap.FramebufferSrgb);

            shaderSK         = new ShaderData();
            shaderSK.it      = new Shader(Shader.SK_VERTEX_SHADER, Shader.SK_FRAGMENT_SHADER);
            shaderSK.MVP_Mat = Gl.GetUniformLocation(shaderSK.it.getProgramId(), "u_mvpMatrix");

            shaderBbox         = new ShaderData();
            shaderBbox.it      = new Shader(Shader.VERTEX_SHADER, Shader.FRAGMENT_SHADER);
            shaderBbox.MVP_Mat = Gl.GetUniformLocation(shaderBbox.it.getProgramId(), "u_mvpMatrix");

            setRenderCameraProjection(param, 0.5f, 20);

            image_handler.initialize();
            bones.init();
            bones.setDrawingType(PrimitiveType.Quads);
            joints.init();
            joints.setDrawingType(PrimitiveType.Quads);
            BBox_edges.init();
            BBox_edges.setDrawingType(PrimitiveType.Lines);
            BBox_faces.init();
            BBox_faces.setDrawingType(PrimitiveType.Quads);

            objectsName = new List <ObjectClassName>();

            Gl.Disable(EnableCap.DepthTest);

            available = true;
        }
Beispiel #3
0
 public void exit()
 {
     if (currentInstance != null)
     {
         image_handler.close();
         available = false;
         BBox_edges.clear();
         BBox_faces.clear();
     }
 }
Beispiel #4
0
 void createBboxRendering(List <Vector3> bb_, float4 bbox_clr)
 {
     // First create top and bottom full edges
     BBox_edges.addFullEdges(bb_, bbox_clr);
     // Add faded vertical edges
     BBox_edges.addVerticalEdges(bb_, bbox_clr);
     // Add faces
     BBox_faces.addVerticalFaces(bb_, bbox_clr);
     // Add top face
     BBox_faces.addTopFace(bb_, bbox_clr);
 }
Beispiel #5
0
        public void draw()
        {
            image_handler.draw();

            Gl.UseProgram(shaderBasic.it.getProgramId());
            Gl.UniformMatrix4f(shaderBasic.MVP_Mat, 1, true, projection_);
            Gl.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Fill);
            Gl.LineWidth(1.5f);
            BBox_edges.draw();
            Gl.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Fill);
            BBox_faces.draw();

            Gl.UseProgram(0);
        }
Beispiel #6
0
        public void draw()
        {
            Gl.Disable(EnableCap.DepthTest);
            image_handler.draw();

            Gl.Enable(EnableCap.DepthTest);
            Gl.UseProgram(shaderSK.it.getProgramId());
            Gl.UniformMatrix4f(shaderSK.MVP_Mat, 1, true, projection_);
            bones.draw();
            joints.draw();

            Gl.UseProgram(shaderBbox.it.getProgramId());
            Gl.UniformMatrix4f(shaderBbox.MVP_Mat, 1, true, projection_);
            Gl.LineWidth(1.5f);
            BBox_edges.draw();
            BBox_faces.draw();
        }
Beispiel #7
0
        public void update(Mat image, Objects objects)
        {
            image_handler.pushNewImage(image);

            //if(objects.isNew == 0) return;

            BBox_faces.clear();
            BBox_edges.clear();
            objectsName.Clear();

            // For each object
            for (int idx = 0; idx < objects.numObject; idx++)
            {
                sl.ObjectData obj = objects.objectData[idx];

                // Only show tracked objects
                if (renderObject(obj))
                {
                    List <Vector3> bb_ = new List <Vector3>();
                    bb_.AddRange(obj.boundingBox);
                    if (bb_.Count > 0)
                    {
                        float4 clr_id    = generateColorClass(obj.id);
                        float4 clr_class = generateColorClass((int)obj.label);

                        if (obj.objectTrackingState != sl.OBJECT_TRACKING_STATE.OK)
                        {
                            clr_id = clr_class;
                        }
                        else
                        {
                            createIDRendering(obj.position, clr_id, obj.id);
                        }

                        createBboxRendering(bb_, clr_id);
                    }
                }
            }
        }
Beispiel #8
0
        public void update(Mat image, Objects objects)
        {
            image_handler.pushNewImage(image);

            bones.clear();
            joints.clear();

            BBox_faces.clear();
            BBox_edges.clear();

            if (Keyboard.IsKeyDown(Key.B))
            {
                showbbox = !showbbox;
            }

            // For each object
            for (int idx = 0; idx < objects.numObject; idx++)
            {
                sl.ObjectData obj = objects.objectData[idx];

                // Only show tracked objects
                if (renderObject(obj))
                {
                    List <Vector3> bb_ = new List <Vector3>();
                    bb_.AddRange(obj.boundingBox);
                    float4    clr_id    = generateColorClass(obj.id);
                    float4    clr_class = generateColorClass((int)obj.label);
                    Vector3[] keypoints = obj.keypoints;

                    if (showbbox)
                    {
                        if (obj.objectTrackingState != sl.OBJECT_TRACKING_STATE.OK)
                        {
                            clr_id = clr_class;
                        }
                        else
                        {
                            createIDRendering(obj.position, clr_id, obj.id);
                        }

                        createBboxRendering(bb_, clr_id);
                    }

                    if (keypoints.Length > 0)
                    {
                        foreach (var limb in BODY_BONES)
                        {
                            Vector3 kp_1 = keypoints[getIdx(limb.Item1)];
                            Vector3 kp_2 = keypoints[getIdx(limb.Item2)];

                            float norm_1 = kp_1.Length();
                            float norm_2 = kp_2.Length();

                            if (!float.IsNaN(norm_1) && norm_1 > 0 && !float.IsNaN(norm_2) && norm_2 > 0)
                            {
                                bones.addCylinder(new float3(kp_1.X, kp_1.Y, kp_1.Z), new float3(kp_2.X, kp_2.Y, kp_2.Z), clr_id);
                            }
                        }
                        for (int i = 0; i < (int)BODY_PARTS.LAST; i++)
                        {
                            Vector3 kp   = keypoints[i];
                            float   norm = kp.Length();
                            if (!float.IsNaN(norm) && norm > 0)
                            {
                                joints.addSphere(new float3(kp.X, kp.Y, kp.Z), clr_id);
                            }
                        }
                    }
                }
            }
        }