Salut J'ai un problème pendant que j'essaie de créer une texture dynamique à affecter comme arrière-plan dans ma fenêtre d'ogre. Je veux assigner des valeurs de façon dynamique pour chaque pixel de texture et ensuite j'utilise cette texture comme arrière-plan. J'utilise ce code pour créer une texture dynamique.obtenir un mauvais RVB lors de la création de texture dynamique dans OGRE
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();
dans ce morceau de code I classer bleu (R: 0 G: 0 B: 255) pour chaque valeur. Je m'attends à obtenir plein de fenêtre bleue mais au lieu de fond bleu j'obtiens ce fond que l'on voit dans l'image. Au lieu de l'arrière-plan bleu, dans la texture que j'obtiens, il y a 3 types de couleurs différents et ils sont toujours répétés par la suite. Les pixels bleus sont vrais mais les 2 autres couleurs seraient bleues. Je ne peux pas trouver la raison qui cause ce problème. Que puis-je faire? Qu'est-ce qu'une mauvaise partie?
Je n'utilise pas ogre mais vous autorisez pour le canal transparent ARVB? On dirait que vous avez besoin d'un supplément * pDest ++ = 0 – Christopher
@Christopher Semble très probable, surtout en regardant le motif répétitif. –
mais au début je crée la texture avec PF_R8G8B8 donc je n'ai pas de canal alpha. le premier pixel est vrai qui est bleu mais deux pixels de suivi faux. va comme ça ensuite – barzos