Ogre中显示Kinect的彩色图像
来源:互联网 发布:手机号码数据库下载 编辑:程序博客网 时间:2024/05/02 02:34
首先创建材质文件以显示所需的图片
//-------------------------------------------------------------------------------------void SetupImageMaterial(){// Create the textureTexturePtr texture = TextureManager::getSingleton().createManual("MyImageTexture", // nameResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,TEX_TYPE_2D, // typem_Width, m_Height, // width & height0, // number of mipmapsPF_B8G8R8A8, // pixel format PF_BYTE_BGRATU_DYNAMIC_WRITE_ONLY_DISCARDABLE);// TU_WRITE_ONLY// Create a material using the textureMaterialPtr material = MaterialManager::getSingleton().create("ImageTextureMaterial", // nameResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);material->getTechnique(0)->getPass(0)->createTextureUnitState("MyImageTexture");}作为前期测试,我们可以设定某一个颜色以在Ogre中生成动态纹理,方式如下:
void UpdateImageTexture(){TexturePtr texture = TextureManager::getSingleton().getByName("MyImageTexture");// Get the pixel bufferOgre::HardwarePixelBufferSharedPtr pixelBuffer = texture->getBuffer(); // Lock the pixel buffer and get a pixel boxpixelBuffer->lock(0, 480*640*4, Ogre::HardwareBuffer::HBL_DISCARD);const Ogre::PixelBox &pixelBox = pixelBuffer->getCurrentLock(); unsigned char* pDest = static_cast<unsigned char*>(pixelBox.data); for(size_t j = 0; j<640; j++){for(size_t i = 0; i<480; i++) // width{pDest[ ((j*480)+i)*4 + 0 ] = 255;pDest[ ((j*480)+i)*4 + 1 ] = 255;pDest[ ((j*480)+i)*4 + 2 ] = 0;pDest[ ((j*480)+i)*4 + 3 ] = 255;}}pixelBuffer->unlock(); }最后,换成利用Kinect更新数据,如下所示
void UpdateImageTexture(){TexturePtr texture = TextureManager::getSingleton().getByName("MyImageTexture");Ogre::HardwarePixelBufferSharedPtr buffer=texture->getBuffer(0,0); buffer->lock(Ogre::HardwareBuffer::HBL_NORMAL);//HBL_DISCARD); const Ogre::PixelBox &pb = buffer->getCurrentLock(); Ogre::uint32 *data = static_cast<Ogre::uint32*>(pb.data); size_t height = pb.getHeight(); size_t width = pb.getWidth(); size_t pitch = pb.rowPitch; // Skip between rows of image xn::ImageMetaData imageMD;m_ImageGenerator.GetMetaData(imageMD);XnUInt16 g_nXRes = imageMD.XRes();XnUInt16 g_nYRes = imageMD.YRes();const XnUInt8* pImage = imageMD.Data(); for(size_t j = 0; j<height; j++){for(size_t i = 0; i< width; i++){if(imageMD.PixelFormat()==XN_PIXEL_FORMAT_RGB24){unsigned char R=pImage[0]; unsigned char G=pImage[1]; unsigned char B=pImage[2]; pImage+=3;Ogre::uint32 pixel=(R<<16)+(G<<8)+(B); data[pitch*j + width-1-i] =pixel ;}else{unsigned char R=12; unsigned char G=120; unsigned char B=12; Ogre::uint32 pixel=(R<<16)+(G<<8)+(B); data[pitch*j + width-1-i] =pixel ;}}}buffer->unlock(); }
- Ogre中显示Kinect的彩色图像
- kinect彩色数据的获取以及在opencv中显示
- [KinectWPF程序]2彩色图像,使用WriteableBitmap对象改进Kinect图像显示&复杂的Kinect初始化方法
- kinect 深度彩色图像对齐的问题
- 如何使用Kinect显示彩色图像和深度图像。
- Kinect彩色相机标定(一):彩色图像的采集
- OpenCV--鼠标响应Kinect彩色图像显示深度信息
- Kinect for Windows 实践笔记NO.1 彩色图像显示
- kinect,openni,opencv 获取并显示深度与彩色图像
- OpenNI结合OpenCV显示Kinect彩色、深度及融合图像
- Kinect入门(1)——显示彩色图像数据流
- Kinect Winform程序中 彩色图像帧转化为Bitmap
- Kinect开发教程二:OpenNI读取深度图像与彩色图像并显示
- Kinect开发教程二:OpenNI读取深度图像与彩色图像并显示
- Kinect开发教程二:OpenNI读取深度图像与彩色图像并显示
- 关于Kinect根据深度图对齐彩色图抠人比彩色图像人大的问题
- 关于Kinect根据深度图对齐彩色图抠人比彩色图像人大的问题
- Heresy透過 OpneNI 合併 Kinect 深度以及彩色影像資料(Kinect开发教程二:OpenNI读取深度图像与彩色图像并显示)
- Qt 4.5 and MySQL-plugin with Mingw on Windows XP
- Android MediaPlayer .
- 选对方向,不要三心二意
- SEO建站优化要注意的一些方面
- R 语言 简介 .
- Ogre中显示Kinect的彩色图像
- php rsa类的一个写法
- 用node.js建博客(一) - node.js安装及Express框架简介
- 国内外 JavaScript 经典网页特效代码封装
- Linux TCP/IP 协议栈的关键数据结构Socket Buffer(sk_buff )
- Yii-数据库操作-多表关联
- 微软图表控件MsChart使用教程
- 手册列表
- 软件工具记录(持续更新)