begin process at 2012 05 30 14:48:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

DirectX

 > 

Recombiner plusieurs surfaces ensembles : direct X 9


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Recombiner plusieurs surfaces ensembles : direct X 9

mercredi 15 février 2006 à 22:39:46 | Recombiner plusieurs surfaces ensembles : direct X 9

jemac

Voila j'ai effectué mes rendus pour remplir une CubeMap (LPDIRECT3DCUBETEXTURE9  m_pCubeMap) , elle a l'air d'être correctement remplit mais voila mon problème :
J'ai besoin de recupérer les 6 faces du cube puis d'acceder aux couleurs pixel par pixel, et enfin de recombiner ces textures dans une seule que je veux afficher sur tout mon écran, dans l'optique d'un projecteur panoramique.
j'ai besoin de les récuperer dans des byte et j'ai mis la CubeMap en D3DFMT_R8G8B8, donc je pense que les surfaces correspondant aux faces seront dans le même mode.

// allocation des tableaux sur lesquels je veux travailler
 byte * imgout= new byte[1024*768*3];
 byte **tabimg;
 tabimg= new byte*[6];

 D3DLOCKED_RECT pLockedRect[6];

 for(int i=0;i<6;i++)
 {
// LE PROBLEME EST ICI
  hr=pCubeMapFace[i]->LockRect(&pLockedRect[i],NULL,D3DLOCK_READONLY);
  if(hr==D3D_OK)
// la recopie ne se fait pas car on entre jamias dans le if, le LockRect ne marche pas
   tabimg[i]=(byte*)pLockedRect[i].pBits;
  }
 }

// ensuite on fait notre traitement sur nos tableaux et on récupère un resultat dans imgout.

 // on unlock les 6 surfaces de rendu
  for(int i=0;i<6;i++)
  {
      pCubeMapFace[i]->UnlockRect();
  }

  // on lock la surface finale
  D3DLOCKED_RECT pLockedRectFinal;
  hr=pMapFinalRendu->LockRect(&pLockedRectFinal,NULL,D3DLOCK_READONLY);
  if(hr==D3D_OK)
  pLockedRectFinal.pBits=imgout;

  // on la unlock
  pMapFinalRendu->UnlockRect();
// on affiche notre surface finale a l'écran, je ne sais pas si cette fonction marche vu que le programme n'est jamias aller jusque la ;-) , de toutes façon le problème se situe avant.
  m_pd3dDevice->SetRenderTarget(0,pMapFinalRendu);


voila, je pense qu'en modifiant les tableaux on modifie la valeur des pixels de la surface, et qu'elle est remise à jour avec le UnLockRect(), je me trompe ou pas?

jeudi 16 février 2006 à 01:44:31 | Re : Recombiner plusieurs surfaces ensembles : direct X 9

Galmiza

Extraits d'un code: for (DWORD k=0; kCreateCubeTexture(dwWidth, 0, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, ppCubeTexture, NULL); for (DWORD i=0; i<6; i++) // The 6 cube faces { if (!*pCpy) { pCpy++; continue; } DWORD dwSize = g_pScene->GetStringLength(pCpy)+1; LPDIRECT3DSURFACE9 pCubeSurface; (*ppCubeTexture)->GetCubeMapSurface( D3DCUBEMAP_FACES(i), 0, &pCubeSurface ); if (pCubeSurface == NULL) return FALSE; D3DCOLOR d3dKeyColor = 0xFFFF00FF; D3DXIMAGE_INFO srcInfo; D3DXLoadSurfaceFromFile(pCubeSurface, NULL, // palette NULL, // rect pCpy, //"right.jpg", NULL, // rect D3DX_FILTER_NONE, d3dKeyColor, &srcInfo); pCpy += dwSize; } }
jeudi 16 février 2006 à 13:54:40 | Re : Recombiner plusieurs surfaces ensembles : direct X 9

jemac

En fait ce que tu propose c'est d'enregistrer les 6 textures dans des fichiers puis les réouvrir plus tard ? Je ne peut pas me permettre de faire cela car le temps de rendu est bien trop lent pour faire du temps réel.
jeudi 16 février 2006 à 16:06:05 | Re : Recombiner plusieurs surfaces ensembles : direct X 9

Galmiza

Nan en fait, je créé une cube texture, puis je remplis les 6 faces avec 6 textures dont les noms sont stockés dans un fichier. Il n'y a aucune opération en trop. Le but de cet extrait est de montrer les paramètres transmis aux fonctions directX. Mince alors, j'avais mal lu ta question... Tu récupères un pointeur vers une des faces de la cube texture ainsi: LPDIRECT3DSURFACE9 pCubeSurface; pCubeTexture->GetCubeMapSurface( D3DCUBEMAP_FACES(i), 0, &pCubeSurface ); Pour accéder aux pixels il te faut effectivement locker la surface mais attention, toutes les surfaces ne sont pas lockables. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/d3dusage.asp Jette un oeil sur ces fonctions si tu veux faire des copies de pixels par bloc. http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c/directx/graphics/reference/d3d/interfaces/IDirect3DDevice9/UpdateSurface.asp http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c/directx/graphics/reference/d3d/interfaces/IDirect3DDevice9/UpdateSurface.asp
jeudi 16 février 2006 à 16:07:29 | Re : Recombiner plusieurs surfaces ensembles : direct X 9

Galmiza

Pardon, copié collé raté pour la 2eme fonction: http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c/directx/graphics/reference/d3d/interfaces/idirect3ddevice9/createoffscreenplainsurface.asp


Cette discussion est classée dans : tableaux, byte, hr, surfaces, recombiner


Répondre à ce message

Sujets en rapport avec ce message

un ti pb sur les tableaux [ par Julius Caesar ] On range dans un tableau 8 entiers générés aléatoirement par l'ordi. coment faire pour être sur que chaque nombre généré soit uniquen c'est à dire qu' Division de deux tableaux d'entiers [ par BenHur ] Bonjour, j'ai deux tableaux d'entiers dont chaque indice contient un nombre de 0 à 9. Je dois faire des opérations mathématiques sur chacun de ces ind TABLEAUX SANS ESPACES [ par golum ] char tab[10];../../*je cherche un test pour savoir si un tableau libéré de ses espaces est vide ...*/if(trim(tab)!='') les tableaux et #define [ par cabarrus ] a quoi servent les tableaux [arrays] et l'instruction #define..rhumsek Comment faire des tableaux de chaines de caractères ? [ par ProGamer ] Je veux faire des tableaux de chaines de caractères I want to make arrays of strings, mais en utilisant seulement le type de base, char.J'ai essayé ce Comment faire des tableaux de chaines de caractères ? [ par ProGamer ] Je veux faire des tableaux de chaines de caractères I want to make arrays of strings, mais en utilisant seulement le type de base, char.J'ai essayé ce Pointeurs sur des tableaux de plusieurs dimensions [ par ProGamer ] J'ai besoin de faire des pointeurs sur ce genre de tableaux. Voici comment je m'y prends (et surtout, voici comment ça ne marche pas...):unsigned char Charger des PNG (encore !) mais dans des surfaces DirectDraw7. [ par ProGamer ] Là, ce n'est pas automatique. Je cherches surtout un code source (c'est plus facile à intégrer dans mon application). Comment mettre en commun deux surfaces ? [ par JMGR ] Bonjour,Je dévellope un jeu de stratégie en 2D, je crée des tiles de 10*10 pixels et mon jeu est en 800*600.Donc si je fait comme ça, ça rame énorméme je suis perdu avec les tableaux !! [ par djamine ] bonjour les programmeurs je suis débutant en C j'aimerais saisir les ages de 40 éleves d'un classe du mon lycée ( ils ont au moins 14 ans et au plus 2


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,683 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales