小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 大海tpz789 2019-04-17

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


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


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



cmake -D ENABLE_OPENGL=YES



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



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



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




resizeWindow(openGLWindowName, 640, 480);


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



setOpenGlContext(openGLWindowName);


現(xiàn)在窗口就可以使用了。為了在窗口上畫(huà)一些東西,應(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í)行效果如下所示:




同樣的,我們可以寫(xiě)其他的繪制函數(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)購(gòu)買(mǎi)等信息,謹(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)論公約

    類似文章 更多