[3.5] pangolin库初步了解

1.基础使用

#include <pangolin/pangolin.h>

int main(int , char **)
{
    //1.创建一个窗口
    pangolin::CreateWindowAndBind("window_title",1000, 600);  //w=1000 h=600
    //2.启用深度测试
    glEnable(GL_DEPTH_TEST);
    //3.创建一个观察相机视图(定义目标并初始化)
    pangolin::OpenGlRenderState s_cam(
        pangolin::ProjectionMatrix(1000,600,420,420,320,240,0.2,100),   //配置相机内参
        //内参依次为相机的图像高度,宽度,4个相机内参,最近最远视距 
        pangolin::ModelViewLookAt(-5,5,-5,0,0,0,pangolin::AxisY)
        //相机所在坐标x,y,z 视点所在坐标x,y,z, y轴为正方向
    );

    const int UI_WIDTH = 500;

    //4.创建交互视图
    pangolin::Handler3D handler(s_cam); //创建一个相机
    pangolin::View& d_cam = pangolin::CreateDisplay().SetBounds(0.0, 1.0, 0.0, 1.0, -640.0f/480.0f).SetHandler(&handler);
    //视图在视图内的的范围(上,下,左,右,长宽比) 比值0:最下端 比值1:最上端

    //7.创建控制面板
    pangolin::CreatePanel("ui").SetBounds(0.0, 1.0, 0.0, pangolin::Attach::Pix(UI_WIDTH));

    pangolin::Var<int> a_int("ui.A_Int", 2,0,5);
    
    while (!pangolin::ShouldQuit()) {
        //5.清空颜色和深度缓存,如果不清空则会保留上一帧图形
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        d_cam.Activate(s_cam);  //个人理解:将相机加载到视图上

        //6.绘制图形
        //6.1绘制立方体
        //pangolin::glDrawColouredCube(-0.1,0.1);   //参数决定边长
        //6.2绘制点
        glPointSize(20.0);
        glBegin(GL_POINTS);
        glColor3f(0,1,0);   //三元色
        glVertex3f(0,0,0);
        glVertex3f(0,1,0);
        glVertex3d(0,0,1);
        glEnd();

        //6.3绘制线
        glLineWidth(20); //设置线宽
        glBegin(GL_LINES);
        glColor3f(0,255,0);
        //两点绘制一条直线
        glVertex3f(1,0,0);
        glVertex3f(0,1,0);

        glColor3f(255,0,0);
        glVertex3f(1,0,0);
        glVertex3f(0,2,0);

        glEnd();



        pangolin::FinishFrame();

    }
    return 0;
}

2.轨迹绘图部分

文件读入进一个vector容器

void DrawTrajectory(vector<Sophus::SE3d, Eigen::aligned_allocator<Sophus::SE3d>> poses) {	
    //vector< Sophus::SE3> poses
    if (poses.empty()) {
        cerr << "Trajectory is empty!\n";
        return;
    }

    // create pangolin window and plot the trajectory
    pangolin::CreateWindowAndBind("Trajectory Viewer", 1024, 768);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_BLEND);     //使用OpenGL混合功能

    //GL_SRC_ALPHA:使用源颜色的alpha值作为因子
    //GL_ONE_MINUS_SRC_ALPHA:表示用1.0减去源颜色的alpha值作为因子
    /*
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        则表示源颜色乘以自身的alpha 值,目标颜色乘以1.0减去源颜色的alpha值,
        这样一来,源颜色的alpha值越大,则产生的新颜色中源颜色所占比例就越大,而目标颜色所占比例则减小。
        这种情况下,我们可以简单的将源颜色的alpha值理解为“不透明度”。
    */
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    pangolin::OpenGlRenderState s_cam(
            pangolin::ProjectionMatrix(1024, 768, 500, 500, 512, 389, 0.1, 1000),
            pangolin::ModelViewLookAt(0, -0.1, -1.8, 0, 0, 0, 0.0, -1.0, 0.0)
    );

    pangolin::View &d_cam = pangolin::CreateDisplay()
            .SetBounds(0.0, 1.0, pangolin::Attach::Pix(175), 1.0, -1024.0f / 768.0f)
            .SetHandler(new pangolin::Handler3D(s_cam));


    while (pangolin::ShouldQuit() == false) {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        d_cam.Activate(s_cam);
        glClearColor(1.0f, 1.0f, 1.0f, 1.0f);

        glLineWidth(2);
        for (size_t i = 0; i < poses.size() - 1; i++) {
            glColor3f(1 - (float) i / poses.size(), 0.0f, (float) i / poses.size());
            glBegin(GL_LINES);
            auto p1 = poses[i], p2 = poses[i + 1];      //这一部分暂时先记住使用方法
            glVertex3d(p1.translation()[0], p1.translation()[1], p1.translation()[2]);
            glVertex3d(p2.translation()[0], p2.translation()[1], p2.translation()[2]);
            //translation() 将群取平移部分
            glEnd();
        }
        pangolin::FinishFrame();
        usleep(5000);   // sleep 5 ms
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值