admin 管理员组

文章数量: 1184232

视框控件

在视窗的基础上,可选择添加控制组件用于完成操作。基础的控件有按钮、滑条、单选框、字符串信息等。

构建相机

首先,构建一个Pangolin相机对象:

#include<string>#include<iostream>#include"main.h"intmain(){
   
   /*--------   构建Pangolin相机   --------*///  视窗
    pangolin::CreateWindowAndBind("Viewer",640,480);//  启动深度测试glEnable(GL_DEPTH_TEST);//  相机
    pangolin::OpenGlRenderState s_cam(
            pangolin::ProjectionMatrix(640,480,420,420,320,240,0.1,1000),
            pangolin::ModelViewLookAt(-1,1,-1,0,0,0, pangolin::AxisY));while(!pangolin::ShouldQuit()){
   
   //  清空颜色、深度缓存区glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//  背景颜色glClearColor(0.1f,0.2f,0.3f,0.3f);//  激活相机对象
        d_cam.Activate(s_cam);// 帧循环
        pangolin::FinishFrame();}return0;}

构建控制面板、交互视图

控制面板的构建使用如下语句进行:

pangolin::CreatePanel(const std::string& name).SetBounds(Attach bottom, Attach top, Attach left, Attach right);
  • name :控制面板的Tag名称 panel_tag
  • SetBounds :设置控制面板的大小、位置

一般将控制面板放置在视窗的左侧,而将交互式图放置在视窗的右侧:

//  交互视图同控制面板分界constint UI_WIDTH =180;//  右侧:交互视图
pangolin::View& d_cam = pangolin::CreateDisplay().SetBounds(0.0,1.0, pangolin::Attach::Pix(UI_WIDTH),1.0,-640.0f/480.0f).SetHandler(new pangolin::Handler3D(s_cam));// 左侧:控制面板
pangolin::CreatePanel("ui").SetBounds(0.0,1.0,0.0, pangolin::Attach::Pix(UI_WIDTH));

此处,定义一个常量 UI_WITH 作为两者的分界面,随后使用 pangolin::Attach::Pix() 获得对应的像素信息。设置控制面板Tag名称为 ui ,实现效果如下:

构建基础控件

Pangolin将所有“控件”视为一个对象 pangolin::Var ,可用于构建按钮、滑条、控制对象、信息显示等内容:

按钮

按钮控件为Bool类型,无法反转的控件:

pangolin::Var<bool>Button(const std::string& name,constbool& value,bool toggle);
  • name :按钮控件的Tag,填写格式: panel_tag.controller_tag
  • value :控件默认值
  • toggle :控件是否可以反转,按钮控件应填写 false

例如,实现一个按钮:

pangolin::Var<bool>A_Button("ui.a_button",false,false);

效果如下:

本文标签: 交互视图 按钮控件 控制面板