C++ 动态2D Ogre3D纹理
我正在尝试为我的食人魔场景创建一个2D背景,为QCAR SDK渲染相机帧。这是一款配备iOS 6的iPad 目前,我正在检索renderFrameQCAR中的像素数据,如下所示:C++ 动态2D Ogre3D纹理,c++,objective-c,ipad,3d,ogre,C++,Objective C,Ipad,3d,Ogre,我正在尝试为我的食人魔场景创建一个2D背景,为QCAR SDK渲染相机帧。这是一款配备iOS 6的iPad 目前,我正在检索renderFrameQCAR中的像素数据,如下所示: const QCAR::Image *image = camFrame.getImage(1); if(image) { pixels = (unsigned char *)image->getPixels(); } 这将返回RGB888格式的像素,然后通过renderOgre()函数将其传递给我的食
const QCAR::Image *image = camFrame.getImage(1);
if(image) {
pixels = (unsigned char *)image->getPixels();
}
这将返回RGB888格式的像素,然后通过renderOgre()函数将其传递给我的食人魔场景:
if(isUpdated)
scene.setCameraFrame(pixels);
scene.m_pRoot->renderOneFrame();
setCameraFrame(像素)功能包括:
void CarScene::setCameraFrame(const unsigned char *pixels)
{
HardwarePixelBufferSharedPtr pBuffer = m_pBackgroundTexture->getBuffer();
pBuffer->lock(HardwareBuffer::HBL_DISCARD);
const PixelBox& pBox = pBuffer->getCurrentLock();
PixelBox *tmp = new PixelBox(screenWidth, screenHeight, 0, PF_R8G8B8, &pixels);
pBuffer->blit(pBuffer, *tmp, pBox);
pBuffer->unlock();
delete tmp;
}
在这个函数中,我试图创建一个新的PixelBox,将像素复制到其中,并通过pixelBuffer进行复制
当我第一次创建Ogre3D场景时,我设置了m_pBackgroundTexture&background rect2d,如下所示:
void CarScene::createBackground()
{
m_pBackgroundTexture = TextureManager::getSingleton().createManual("DynamicTexture", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_2D, m_pViewport->getActualWidth(), m_pViewport->getActualHeight(), 0, PF_R8G8B8, TU_DYNAMIC_WRITE_ONLY_DISCARDABLE);
m_pBackgroundMaterial = MaterialManager::getSingleton().create("Background", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
m_pBackgroundMaterial->getTechnique(0)->getPass(0)->createTextureUnitState("DynamicTexture");
m_pBackgroundMaterial->getTechnique(0)->getPass(0)->setSceneBlending(SBT_TRANSPARENT_ALPHA);
m_pBackgroundMaterial->getTechnique(0)->getPass(0)->setDepthCheckEnabled(false);
m_pBackgroundMaterial->getTechnique(0)->getPass(0)->setDepthWriteEnabled(false);
m_pBackgroundMaterial->getTechnique(0)->getPass(0)->setLightingEnabled(false);
m_pBackgroundRect = new Rectangle2D(true);
m_pBackgroundRect->setCorners(-1.0, 1.0, 1.0, -1.0);
m_pBackgroundRect->setMaterial("Background");
m_pBackgroundRect->setRenderQueueGroup(RENDER_QUEUE_BACKGROUND);
AxisAlignedBox aabInf;
aabInf.setInfinite();
m_pBackgroundRect->setBoundingBox(aabInf);
SceneNode* node = m_pSceneManager->getRootSceneNode()->createChildSceneNode();
node->attachObject(m_pBackgroundRect);
}
在这之后,我得到的是一个没有纹理的白色背景,我不知道这为什么不显示输出!我的目标是将相机渲染到背景中,这样我就可以将我的3d模型投影到背景上
谢谢,
Harry。您确定renderFrameQCAR正在工作吗?您似乎正在同时调试渲染系统和像素源。如果只提供虚拟像素数据,动态纹理是否有效?