Динамический 2D Ogre3D Texutre

Я пытаюсь создать 2D фон для моей сцены людоедов, который отображает кадры камеры для QCAR SDK. Это на iPad с iOS 6.

В данный момент я извлекаю данные о пикселях примерно так в 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, скопировать в него пиксели и скопировать его поверх пиксельного буфера.

Когда я впервые создаю свою сцену 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 модель на него.

Спасибо,
Гарри.

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]