// 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 (imageLeft.IsInit()) { // Retrieve left image zedCamera.RetrieveMeasure(pointCloud, sl.MEASURE.XYZRGBA, sl.MEM.CPU, pcRes); zedCamera.RetrieveImage(imageLeft, sl.VIEW.LEFT, sl.MEM.CPU, displayRes); zedCamera.GetPosition(ref camPose, REFERENCE_FRAME.WORLD); // Retrieve Objects zedCamera.RetrieveObjects(ref objects, ref obj_runtime_parameters); TrackingViewer.render_2D(ref imageLeftOcv, imgScale, ref objects, isTrackingON); //Update GL View viewer.update(pointCloud, objects, camPose); viewer.render(); if (isPlayback && zedCamera.GetSVOPosition() == zedCamera.GetSVONumberOfFrames()) { return; } Cv2.ImShow(window_name, imageLeftOcv); } } }
// 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); if (err == ERROR_CODE.SUCCESS) { // Retrieve Objects zedCamera.RetrieveObjects(ref object_frame, ref obj_runtime_parameters); //Update GL View viewer.update(zedMat, object_frame); viewer.render(); } } } }
// 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) { if (point_cloud.IsInit()) { // Retrieve Objects err = zedCamera.RetrieveObjects(ref object_frame, ref obj_runtime_parameters); if (err == ERROR_CODE.SUCCESS && object_frame.isNew != 0) { // 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, object_frame, cam_pose); viewer.render(); } } } }
// 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 (tracking_state == POSITIONAL_TRACKING_STATE.OK) { timer++; if (userAction.hit) { Vector2 imageClick = new Vector2((float)userAction.hitCoord.X * (float)zedCamera.ImageWidth, (float)userAction.hitCoord.Y * (float)zedCamera.ImageHeight); findPlaneStatus = zedCamera.findPlaneAtHit(ref plane, imageClick); if (findPlaneStatus == ERROR_CODE.SUCCESS) { zedCamera.convertHitPlaneToMesh(planeMeshVertices, planeMeshTriangles, out nbVertices, out nbTriangles); } userAction.clear(); } //if 500ms have spend since last request (for 60fps) if (timer % 30 == 0 && userAction.pressSpace) { // Update pose data (used for projection of the mesh over the current image) Quaternion priorQuat = Quaternion.Identity; Vector3 priorTrans = Vector3.Zero; findPlaneStatus = zedCamera.findFloorPlane(ref plane, out float playerHeight, priorQuat, priorTrans); if (findPlaneStatus == ERROR_CODE.SUCCESS) { zedCamera.convertFloorPlaneToMesh(planeMeshVertices, planeMeshTriangles, out nbVertices, out nbTriangles); } userAction.clear(); } } if (findPlaneStatus == ERROR_CODE.SUCCESS) { viewer.updateMesh(planeMeshVertices, planeMeshTriangles, nbVertices, nbTriangles, plane.Type, plane.Bounds, userAction); } viewer.updateImageAndState(zedMat, cam_pose, tracking_state); viewer.render(); } } }
// 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); }
// Create Window public void CreateWindow() { using (OpenGL.CoreUI.NativeWindow nativeWindow = OpenGL.CoreUI.NativeWindow.Create()) { nativeWindow.ContextCreated += NativeWindow_ContextCreated; nativeWindow.Render += NativeWindow_Render; nativeWindow.MouseMove += NativeWindow_MouseEvent; nativeWindow.Resize += NativeWindow_Resize; nativeWindow.KeyDown += (object obj, NativeWindowKeyEventArgs e) => { switch (e.Key) { case KeyCode.Escape: close(); nativeWindow.Stop(); break; case KeyCode.F: nativeWindow.Fullscreen = !nativeWindow.Fullscreen; break; } viewer.keyEventFunction(e); }; //nativeWindow.MultisampleBits = 4; int wnd_h = Screen.PrimaryScreen.Bounds.Height; int wnd_w = Screen.PrimaryScreen.Bounds.Width; int height = (int)(wnd_h * 0.9f); int width = (int)(wnd_w * 0.9f); if (width > zedCamera.ImageWidth && height > zedCamera.ImageHeight) { width = zedCamera.ImageWidth; height = zedCamera.ImageHeight; } nativeWindow.Create((int)(zedCamera.ImageWidth * 0.05f), (int)(zedCamera.ImageHeight * 0.05f), 1200, 700, NativeWindowStyle.Resizeable); nativeWindow.Show(); nativeWindow.Run(); } }
// Create Window public void CreateWindow() { using (OpenGL.CoreUI.NativeWindow nativeWindow = OpenGL.CoreUI.NativeWindow.Create()) { nativeWindow.ContextCreated += NativeWindow_ContextCreated; nativeWindow.Render += NativeWindow_Render; nativeWindow.MouseDown += NativeWindow_MouseDown; nativeWindow.KeyDown += (object obj, NativeWindowKeyEventArgs e) => { switch (e.Key) { case KeyCode.Escape: close(); nativeWindow.Stop(); break; case KeyCode.F: nativeWindow.Fullscreen = !nativeWindow.Fullscreen; break; case KeyCode.Space: userAction.pressSpace = true; break; } }; int wnd_h = Screen.PrimaryScreen.Bounds.Height; int wnd_w = Screen.PrimaryScreen.Bounds.Width; int height = (int)(wnd_h * 0.9f); int width = (int)(wnd_w * 0.9f); if (width > zedCamera.ImageWidth && height > zedCamera.ImageHeight) { width = zedCamera.ImageWidth; height = zedCamera.ImageHeight; } nativeWindow.Create((int)(zedCamera.ImageWidth * 0.05f), (int)(zedCamera.ImageHeight * 0.05f), (uint)width, (uint)height, NativeWindowStyle.Resizeable); nativeWindow.Show(); nativeWindow.Run(); } }
// 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++; } }
private void NativeWindow_Resize(object sender, EventArgs e) { OpenGL.CoreUI.NativeWindow nativeWindow = (OpenGL.CoreUI.NativeWindow)sender; viewer.resizeCallback((int)nativeWindow.Width, (int)nativeWindow.Height); }
// 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(); } } }
// 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); } }