C++ 如何使用面板在穿山甲中显示二维图形
我不知道如何使用穿山甲来显示2D openGL图形 我在一所学校的研究部实习。 我是OpenGl和穿山甲的新手。 我正试图在开源程序中添加一个监视窗口,以便它更方便用户。这个程序是,它已经用作openGL显示管理器。通过这段代码,它已经有了一些带有面板和3d openGL显示的窗口C++ 如何使用面板在穿山甲中显示二维图形,c++,opengl,window,opengl-compat,C++,Opengl,Window,Opengl Compat,我不知道如何使用穿山甲来显示2D openGL图形 我在一所学校的研究部实习。 我是OpenGl和穿山甲的新手。 我正试图在开源程序中添加一个监视窗口,以便它更方便用户。这个程序是,它已经用作openGL显示管理器。通过这段代码,它已经有了一些带有面板和3d openGL显示的窗口 void Viewer::Run() { //... pangolin::CreateWindowAndBind("ORB-SLAM2: Map Viewer",1024,768); //
void Viewer::Run()
{
//...
pangolin::CreateWindowAndBind("ORB-SLAM2: 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));
// ... define elements of the menu (not important)
// Define Camera Render Object (for view / scene browsing)
pangolin::OpenGlRenderState s_cam(
pangolin::ProjectionMatrix(1024,768,mViewpointF,mViewpointF,512,389,0.1,1000),
pangolin::ModelViewLookAt(mViewpointX,mViewpointY,mViewpointZ, 0,0,0,0.0,-1.0, 0.0));
// 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));
pangolin::OpenGlMatrix Twc;
Twc.SetIdentity();
//...
while(1)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
mpMapDrawer->GetCurrentOpenGLCameraMatrix(Twc);
//...
d_cam.Activate(s_cam);
glClearColor(1.0f,1.0f,1.0f,1.0f);
mpMapDrawer->DrawCurrentCamera(Twc);
if(menuShowKeyFrames || menuShowGraph)
mpMapDrawer->DrawKeyFrames(menuShowKeyFrames,menuShowGraph);
if(menuShowPoints)
mpMapDrawer->DrawMapPoints();
pangolin::FinishFrame();
//...
}
所以我试着复制它,然后像这样移除它的3D处理部分
void Monitor::Run()
{
//...
pangolin::CreateWindowAndBind("ORB-SLAM2: Monitoring",1024,768);
// Issue specific OpenGl we might need
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
pangolin::View& menu = pangolin::CreatePanel("vars").SetBounds(0.0,1.0,0.0,pangolin::Attach::Pix(175));
//...
// Add named OpenGL viewport to window
pangolin::View& graph = pangolin::CreateDisplay()
.SetBounds(0.0, 1.0, pangolin::Attach::Pix(175), 1.0, 1024.0f/768.0f);
while (1){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
graph.Activate();
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
// 2D Basic test shape
glBegin(GL_QUADS);
glColor3f(0.4f, 0.05f, 0.05f);
glVertex2f(-0.5, 0.8f);
glVertex2f(-0.8f, -0.8f);
glVertex2f(0.8f, -0.8f);
glVertex2f(0.8f, 0.8f); glEnd();
pangolin::FinishFrame();
}
}
但是2D的形状并不明显,它只显示背景色
我尝试了以下方法:
- 移除面板:它使形状出现,但我想保留面板
- 更改菜单的顺序和两个顺序中的形状并没有改变任何东西
- 并没有将其封闭在无限的while循环中:面板和形状都出现了,但显然它是一个静态图像。但是,在第一次调用FinishFrame()时,渲染似乎可以工作,然后就不再工作了