Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用面板在穿山甲中显示二维图形_C++_Opengl_Window_Opengl Compat - Fatal编程技术网

C++ 如何使用面板在穿山甲中显示二维图形

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); //

我不知道如何使用穿山甲来显示2D openGL图形

我在一所学校的研究部实习。 我是OpenGl和穿山甲的新手。 我正试图在开源程序中添加一个监视窗口,以便它更方便用户。这个程序是,它已经用作openGL显示管理器。通过这段代码,它已经有了一些带有面板和3d openGL显示的窗口

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()时,渲染似乎可以工作,然后就不再工作了

和其他东西,但我不能在这里全部列出

我不知道是不是因为我没有创建OpenGlRenderState对象,但从我对OpenGL和Pangolin的理解来看,我不明白为什么需要它来进行2D渲染

我希望你们能帮助我