Sprite qui ne s'affice pas help!!

olivierpot2 Messages postés 14 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 9 février 2005 - 8 mars 2004 à 21:10
tsanti Messages postés 9 Date d'inscription jeudi 11 septembre 2003 Statut Membre Dernière intervention 22 mars 2006 - 30 mars 2004 à 22:41
Bonjour à tous,

Je débutes avec c++/directx, et j'essaye d'afficher une image toutes bêtes. Apparement l'initialisation de directX et ok, mais rien ne s'affiche.

Je charge une texture avec la fonction :

D3DXCreateTextureFromFile(peripherique3D,"c:/test.bmp",&texture);

Puis la dessine dans une boucle:

// on remplit de noir
peripherique3D->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0);

peripherique3D->BeginScene();

Sprite->Draw(texture,NULL,NULL,NULL,0,NULL,32);

peripherique3D->EndScene();

// on "blitte"
peripherique3D->Present( NULL, NULL, NULL, NULL );

Si quelqu'un voit ce qu'il ne vas pas cela serait sympa de m'aider.

Si vous voulez voir tout le code source il est à cette adresse:
http://java2d.free.fr/source/cpp/essai_directx.zip

Merci d'avance.

1 réponse

tsanti Messages postés 9 Date d'inscription jeudi 11 septembre 2003 Statut Membre Dernière intervention 22 mars 2006
30 mars 2004 à 22:41
Tu doit créée un objet avec une forme et y appliquée ta texture.
La forme la plus simple est un plan carré.
LPDIRECT3DVERTEXBUFFER9 m_taforme;
LPDIRECT3DTEXTURE9 m_tatexture;
déclare aussi un Vertex comme ca :
Initialise comme ca :
struct VERTEX
{
D3DXVECTOR3 p;
FLOAT tu, tv;

static const DWORD FVF;
};
const DWORD VERTEX::FVF = D3DFVF_XYZ | D3DFVF_TEX1;

Dans ta procedure d'initialisation:
=>ta texture c'est fait

if( FAILED( peripherique3D->CreateVertexBuffer( 4*sizeof(VERTEX),
D3DUSAGE_WRITEONLY, VERTEX::FVF,
D3DPOOL_MANAGED, &m_taforme, NULL ) ) )
return E_FAIL;
VERTEX* v;
m_taforme->Lock( 0, 0, (void**)&v, 0 );
v[0].p = D3DXVECTOR3(-1000.0f, 0.0f, 0.0f );
v[1].p = D3DXVECTOR3(-1000.0f, 1000.0f, 0.0f );
v[2].p = D3DXVECTOR3( 1000.0f, 0.0f, 0.0f );
v[3].p = D3DXVECTOR3( 1000.0f, 1000.0f, 0.0f );
v[0].tu = 0.0f; v[0].tv = 147/256.0f;
v[1].tu = 0.0f; v[1].tv = 0.0f;
v[2].tu = 1.0f; v[2].tv = 147/256.0f;
v[3].tu = 1.0f; v[3].tv = 0.0f;
m_taforme->Unlock();

dans ton rendu tu fait :
peripherique3D->SetTexture( 0, m_ta texture );
peripherique3D->SetFVF( VERTEX::FVF );
peripherique3D->SetStreamSource( 0, m_taforme, 0, sizeof(VERTEX) );
peripherique3D->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );

La difficulté est la car il ne suffit pas de charger une image.
=>Les informations de formes sont chargé à ta carte graphiques et peuvent être perdu si la fenètre a bouger.
Il faut donc invalidé et restoré les données de ta forme.

=> avant de quitter ton application, tu doit détruire les informations de ta forme par un SAFE_DELETE.

=> Afficher à l'écran , c'est lui donnée des infomations genre positions dans l'espace, position de l'oeil(ou dit caméra) et position du plan de vue. c'est a dire travailler avec des vecteurs 3D, faire les produit scalaire, etc etc
l'auberge n'est pas loin de chez toi mais tu n'est pas sorti encore. ( euh c'est p tete pas ca la sitation.)

DIRECT_SANTI_3DX9 :)
0
Rejoignez-nous