3

我正在尝试为我的 Ogre 场景创建一个 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(pixels) 函数包括:

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 和背景 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 模型投影到它上面。

谢谢,哈利。

4

0 回答 0