例如,当我单独使用 OpenCV 库(或使用纯 OpenGL)时,我能够成功地从我的网络摄像头中检索相机帧并使用 GLUT 窗口显示它。但是,当我使用 Irrlicht 作为渲染引擎执行完全相同的过程时,我总是得到空帧。有谁知道为什么会发生这种情况?
while(device->run())
{
if( cv::waitKey(50) >= 0 ) break;
if( !capture.grab() )
{
std::cout << "Unable to grab camera grame\n";
}
capture >> camera_frame;
if( ! camera_frame.empty() )
{
unsigned char *tex_buf = (unsigned char*)frame_tex->lock();
unsigned char *frame_buf = camera_frame.data;
// Convert from RGB to RGBA
for(int y=0; y < camera_frame.rows; y++) {
for(int x=0; x < camera_frame.cols; x++) {
*(tex_buf++) = *(frame_buf++);
*(tex_buf++) = *(frame_buf++);
*(tex_buf++) = *(frame_buf++);
*(tex_buf++) = 255;
}
}
frame_tex->unlock();
driver->beginScene(true, true, SColor(255,100,101,140));
driver->draw2DImage(frame_tex, core::rect<s32>(0,0,WINDOW_WIDTH,WINDOW_HEIGHT),
core::rect<s32>(0,0,WINDOW_WIDTH,WINDOW_HEIGHT));
smgr->drawAll();
guienv->drawAll();
driver->endScene();
}
}
device->drop();
如果我将代码放在(包括)beginScene 和 endScene 之外的相机框架空性测试之外,我的网格将被正确渲染,但不会显示相机框架(框架保持为空)。