안녕하세요. 오우거 창에 배경으로 할당 할 동적 텍스처를 만드는 동안 문제가 있습니다. 텍스처의 각 픽셀에 대해 동적으로 값을 할당하고이 텍스처를 배경으로 사용하고 싶습니다. 이 코드를 사용하여 동적 텍스처를 만듭니다. 코드의 이러한 부분에서 OGRE에서 동적 텍스처를 생성하는 동안 잘못된 RGB를 가져옵니다.
Ogre::TexturePtr texture = Ogre::TextureManager::getSingleton().createManual("BackgroundTex", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, 800, 600, 0, Ogre::PF_R8G8B8, Ogre:: TU_DYNAMIC);
Ogre::MaterialPtr material = Ogre::MaterialManager::getSingleton().create("BackgroundMat",Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
material->getTechnique(0)->getPass(0)->createTextureUnitState("BackgroundTex");
material->getTechnique(0)->getPass(0)->setSceneBlending(Ogre::SBT_TRANSPARENT_COLOUR);
Ogre::Rectangle2D* rect = new Ogre::Rectangle2D(true);
rect->setCorners(-1.0, 1.0, 1.0, -1.0);
rect->setRenderQueueGroup(Ogre::RENDER_QUEUE_BACKGROUND);
rect->setBoundingBox(Ogre::AxisAlignedBox(-100000.0 * Ogre::Vector3::UNIT_SCALE, 100000.0 * Ogre::Vector3::UNIT_SCALE));
Ogre::SceneNode* node = sceneManager->getRootSceneNode()->createChildSceneNode("BackgroundMat");
node->attachObject(rect);
node->setVisible(true);
rect->setMaterial("BackgroundMat");
Ogre::HardwarePixelBufferSharedPtr pixelBuffer = texture->getBuffer();
pixelBuffer->lock(Ogre::HardwareBuffer::HBL_DISCARD);
const Ogre::PixelBox& pixelBox = pixelBuffer->getCurrentLock();
Ogre::uint8* pDest = static_cast<Ogre::uint8*>(pixelBox.data);
for(size_t i=0; i < 600; i++)
{
for(size_t j=0; j < 800; j++)
{
*pDest++ = 0;
*pDest++ = 0;
*pDest++ = 255;
}
}
pixelBuffer->unlock();
내가 청색 (0 G : R 0 B : 255)를 할당하는 각 값에 대해. 파란 창으로 가득차는 것을 기대하지만, 파란 배경 대신 그림에서 본 배경을 얻습니다.
파란색 배경 대신, 내가 얻는 질감에는 3 가지 색상 유형이 있으며 항상 연속적으로 반복됩니다. 파란색 픽셀은 사실이지만 다른 두 색도 파란색입니다. 이 문제를 일으키는 원인을 찾을 수 없습니다. 내가 무엇을 할 수 있을지? 잘못된 부분은 무엇입니까?
나는 오우거를 사용하지 않는하지만 당신은 투명 채널 ARGB 허용된다? 당신이 여분의 * pDest ++ = 0을 필요로하는 것처럼 보입니다. – Christopher
@Christopher 매우 반복적 인 패턴을 볼 때 특히 그렇습니다. –
하지만 beginnig에서는 PF_R8G8B8로 텍스처를 생성하므로 알파 채널이 없습니다. 첫 번째 픽셀은 파란색이지만 두 개의 픽셀은 잘못되었습니다. 그런 순차적으로갑니다 – barzos