原文: https://www.jianshu.com/p/3baff8a66927
pangolin是OpenGL的轻量级封装
代码解释均在注释之中
#include <pangolin/pangolin.h>
int main( int /*argc*/, char** /*argv*/ )
{
pangolin::CreateWindowAndBind("Main",640,480);
glEnable(GL_DEPTH_TEST);
// Define Projection and initial ModelView matrix
pangolin::OpenGlRenderState s_cam(
pangolin::ProjectionMatrix(640,480,420,420,320,240,0.2,100),//设置相机参数
pangolin::ModelViewLookAt(-2,2,-2, 0,0,0, pangolin::AxisNegY)//观测视角
);
// Create Interactive View in window
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);
while( !pangolin::ShouldQuit() )
{
// Clear screen and activate view to render into
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
d_cam.Activate(s_cam);
pangolin::glDrawAxis(3);//绘制坐标系
// Render OpenGL Cube
pangolin::glDrawColouredCube();//绘制坐标系上的方方
//对下面的对象进行变换,进行一个次次变换
glPushMatrix();
std::vector<GLfloat > Twc = {1,0,0,0, 0,1,0,0 , 0,0,1,0 ,5,0,0,1};//变换矩阵
glMultMatrixf(Twc.data());
//画点
glPointSize(10.0f);
glBegin(GL_POINTS);
glColor3f(1.0,1.0,0.1);
glVertex3f(0,0,0);
glEnd();
//画线,一对点代表一条线
const float w = 5;
const float h = w*0.75;
const float z = w*0.6;
glLineWidth(2);//线宽
glColor3f(1.0,1.0,0);
glBegin(GL_LINES);
//第一条线,连接如下两个点
glVertex3f(0,0,0);
glVertex3f(1,1,1);
//第二条线,连接如下两个点
glVertex3f(5,1,0.5);
glVertex3f(w,-h,z);
//以此类推...
glVertex3f(5,2,5);
glVertex3f(-w,-h,z);
glVertex3f(0,0,0);
glVertex3f(-w,h,z);
glVertex3f(w,h,z);
glVertex3f(-w,h,z);
glVertex3f(-w,h,z);
glVertex3f(-w,-h,z);
glVertex3f(-w,-h,z);
glVertex3f(w,-h,z);
glVertex3f(w,-h,z);
glVertex3f(w,h,z);
glEnd();
// Swap frames and Process Events
pangolin::FinishFrame();
}
return 0;
}