乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      opengl學(xué)習(xí)筆記(二):使用OpenCV來創(chuàng)建OpenGL窗口

       大海tpz789 2019-04-17

      通常的增強(qiáng)現(xiàn)實(shí)應(yīng)用需要支持OpenGL的OpenCV來對(duì)真實(shí)場(chǎng)景進(jìn)行渲染。從2.4.2版本開始,OpenCV在可視化窗口中支持OpenGL。這意味著在OpenCV中可輕松渲染任何3D內(nèi)容。


      若要在OpenCV中開始一個(gè)OpenGL窗口,需要做的第一件事是生成支持OpenGL的OpenCV。


      在cmake的時(shí)候,應(yīng)該設(shè)置標(biāo)志:



      cmake -D ENABLE_OPENGL=YES



      如果現(xiàn)在有一個(gè)支持OpenGL的OpenCV庫,可用其創(chuàng)建第一個(gè)OpenGL窗口。OpenGL窗口的初始化由創(chuàng)建一個(gè)命名的窗口開始,這需要設(shè)置一個(gè)OpenGL標(biāo)志:



      string openGLWindowName = "OpenGL Test";
      cv::namedWindow(openGLWindowName, WINDOW_OPENGL);



      openGLWindowName是一個(gè)字符串變量,保存著窗口的名稱。
      然后設(shè)置窗口大小




      resizeWindow(openGLWindowName, 640, 480);


      接下來需對(duì)此窗口設(shè)置上下文:



      setOpenGlContext(openGLWindowName);


      現(xiàn)在窗口就可以使用了。為了在窗口上畫一些東西,應(yīng)用以下方法注冊(cè)一個(gè)回調(diào)函數(shù):



      setOpenGlDrawCallback(openGLWindowName, on_opengl, NULL);


      該回調(diào)函數(shù)將被稱為回調(diào)窗口。第一個(gè)參數(shù)為窗口名,第二個(gè)參數(shù)為回調(diào)函數(shù),第三個(gè)可選參數(shù)將被傳遞給回調(diào)函數(shù)。


      on_opengl是一個(gè)繪圖函數(shù),例如:


      復(fù)制代碼

      void on_opengl(void* param)
      {
          glLoadIdentity();
          glTranslated(0.0, 0.0, -1.0);
          glRotatef( 55, 1, 0, 0 );
          glRotatef( 45, 0, 1, 0 );
          glRotatef( 0, 0, 0, 1 );
          static const int coords[6][4][3] = {
              { { +1, -1, -1 }, { -1, -1, -1 }, { -1, +1, -1 }, { +1, +1, -1 } },
              { { +1, +1, -1 }, { -1, +1, -1 }, { -1, +1, +1 }, { +1, +1, +1 } },
              { { +1, -1, +1 }, { +1, -1, -1 }, { +1, +1, -1 }, { +1, +1, +1 } },
              { { -1, -1, -1 }, { -1, -1, +1 }, { -1, +1, +1 }, { -1, +1, -1 } },
              { { +1, -1, +1 }, { -1, -1, +1 }, { -1, -1, -1 }, { +1, -1, -1 } },
              { { -1, -1, +1 }, { +1, -1, +1 }, { +1, +1, +1 }, { -1, +1, +1 } }
          };
          for (int i = 0; i < 6; ++i) {
                      glColor3ub( i*20, 100+i*10, i*42 );
                      glBegin(GL_QUADS);
                      for (int j = 0; j < 4; ++j) {
                              glVertex3d(0.2 * coords[i][j][0], 0.2 * coords[i][j][1], 0.2 * coords[i][j][2]);
                      }
                      glEnd();
          }
      }

      復(fù)制代碼

      這個(gè)函數(shù)可以繪制一個(gè)長(zhǎng)方體,程序執(zhí)行效果如下所示:




      同樣的,我們可以寫其他的繪制函數(shù)


      復(fù)制代碼

      void onDraw(void* param)
      {
          // Draw something using OpenGL here
          glClearColor(0.0f, 0.0f, 1.0f, 1.0f);   // background
          glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
      
          glColor3f(1.0f, 0.0f, 0.0f);
          glRectf(-0.5f, -0.5f, 0.5f, 0.5f);  // draw rect
          glFlush();
      }

      復(fù)制代碼

      此函數(shù)的作用是在藍(lán)色背景下繪制一個(gè)紅色方塊,程序運(yùn)行效果如下:




       完整代碼下載地址:https://download.csdn.net/download/buaa_zn/10476956















        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多