Pangolin的简单使用
一、Pangolin的编译
- 在win10系统,使用vs2017编译64位的pangolin库是比较简单的事情。直接下载最新的pangolin库,使用cmake-gui工具编译即可,建议使用3.14以上的版本,下载地址为cmake官网。
- 直接使用cnake-gui生成vs2017 64位的工程,编译过程中会自动下载需要的库,无需多余的配置。
- 可以根据需要修改pangolin库的安装路径(CMAKE_INSTALL_PREFIX对应的路径),最好修改一下,不然会默认安装到C盘,不好查找。
- 直接编译(Release模式)即可成功,点击install工程,使用仅安装生成,即可得到pangolin库。
- 安装过程如出现错误,可以参考这篇文章。
- win10+vs2017编译好的可以在这里下载。
二、Pangolin的配置
- 安装成功后,会出现lib, include,bin三个文件夹。
- 将lib添加到库目录中,例如:3rd_party\Pangolin\lib
- 将include添加到包含目录中,例如:3rd_party\Pangolin\include
- 在连接器-输入-附加依赖项中添加:
pangolin.lib
glew.lib
glu32.lib
opengl32.lib
mfplat.lib
mfreadwrite.lib
mfuuid.lib
strmiids.lib
mf.lib
三、测试例子
#include <iostream>
#include <iomanip>
#include <pangolin/pangolin.h>
using namespace std;
int main ( int argc, char** argv )
{
pangolin::CreateWindowAndBind("my-slam: Map Viewer", 1024, 768);
// 3D Mouse handler requires depth testing to be enabled
glEnable(GL_DEPTH_TEST);
// Issue specific OpenGl we might need
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
pangolin::CreatePanel("menu").SetBounds(0.0, 1.0, 0.0, pangolin::Attach::Pix(175));
pangolin::Var<bool> menuFollowCamera("menu.Follow Camera", true, true);
pangolin::Var<bool> menuShowPoints("menu.Show Points", true, true);
pangolin::Var<bool> menuShowKeyFrames("menu.Show KeyFrames", true, true);
pangolin::Var<bool> menuShowGraph("menu.Show Graph", true, true);
pangolin::Var<bool> menuLocalizationMode("menu.Localization Mode", false, true);
pangolin::Var<bool> menuReset("menu.Reset", false, false);
// Define Camera Render Object (for view / scene browsing)
pangolin::OpenGlRenderState s_cam = pangolin::OpenGlRenderState(
pangolin::ProjectionMatrix(1024, 768, 500, 500, 512, 389, 0.1, 1000),
pangolin::ModelViewLookAt(0, -0.7, -1.8, 0, 0, 0, 0.0, -1.0, 0.0)
);
pangolin::OpenGlMatrix Tcw;
Tcw.SetIdentity();
// Add named OpenGL viewport to window and provide 3D Handler
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 (1)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
s_cam.Follow(Tcw);
d_cam.Activate(s_cam);
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
pangolin::FinishFrame();
}
return 0;
}
- 效果图如下