C++ 动态2D Ogre3D纹理

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()函数将其传递给我的食

我正在尝试为我的食人魔场景创建一个2D背景,为QCAR SDK渲染相机帧。这是一款配备iOS 6的iPad

目前,我正在检索renderFrameQCAR中的像素数据,如下所示:

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正在工作吗?您似乎正在同时调试渲染系统和像素源。如果只提供虚拟像素数据,动态纹理是否有效?