IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

Sprites et Textures [DirectX 9]


Sujet :

DirectX

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 54
    Points
    54
    Par défaut Sprites et Textures
    Bonsoir,
    Mon problème du jour c'est le chargement de textures
    L'objectif étant de charger un LPDIRECT3DTEXTURE9 avec une texture pour l'utiliser dans un Sprite. C'est bien joli mais quand le fichier ne veut pas se faire charger ça va mal.
    Voilà mon bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    #include <d3d9.h>
    #include <d3dx9.h>
    #include <d3dx9tex.h>
    #include <d3dx9math.h>
    #include <d3dx9math.inl>
    #include <windows.h>
    #include <windowsx.h>
    #include <iostream>
    #include <string>
    #include "GWindowClass.h"
    #include "VertexBufferFAIL.h"
    using namespace std;
     
    #pragma comment (lib, "d3d9.lib")
    #pragma comment (lib, "d3dx9.lib")
    /**************************************************************************************************************************************/
    LPDIRECT3DTEXTURE9 *ppTexture=NULL;
    LPD3DXSPRITE sprite = NULL;
    D3DXVECTOR3 pos(10.0f,10.0f,0.0f);
     
     
     
     
    LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ); 
     
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
     
    	GWindow Fenetre;
    	Fenetre.initialization("Ma Fenêtre",10,10,1000,1000,hInstance);
    	Fenetre.D3DInit();
     
    	// SPRITE
    	if (D3DXCreateTextureFromFile(Fenetre.d3ddev,"Axi.bmp",ppTexture) != 0){
    		MessageBox(NULL,
                   "PB Texture",
                   "Texture!",
                   MB_ICONEXCLAMATION | MB_OK);
    	}
     
    	if (D3DXCreateSprite(Fenetre.d3ddev,&sprite ) != 0){
    		MessageBox(NULL,
                   "PB Sprite",
                   "Sprite!",
                   MB_ICONEXCLAMATION | MB_OK);
    	}
    	Fenetre.d3ddev->SetTexture(0,*ppTexture);
     
     
     
    	MSG msg;
    		while( 1 ){
    			while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
    				TranslateMessage(&msg);
    				DispatchMessage(&msg);
    			}
     
    			if(msg.message == WM_QUIT){
    				break;
    			}
    			Fenetre.beginRender();
    			/*
    			sprite->Begin(D3DXSPRITE_ALPHABLEND);
    			sprite->Draw(*ppTexture,NULL,NULL,&pos,0xFFFFFFFF);
    			sprite->End();
    			*/
    			Fenetre.endRender();			
    		}
     
    	return 0; 
    }
     
    LRESULT CALLBACK GWindow::WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ){
    	switch (msg){
            case WM_DESTROY:
                 PostQuitMessage(0);
    			 return 0;
            default:
                return DefWindowProc(hWnd, msg, wParam, lParam);
    	}
    }
    La première erreur ssurgit lors du SetTexture ( erreur CXX0030, j'ai fait des recherches qui n'ont pas abouti) . Tout ce que je peux en déduire c'est que mon pointeur texture pointe n'importe où


    Merci d'avance !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mars 2006
    Messages : 143
    Points : 112
    Points
    112
    Par défaut
    D3DXCreateTextureFromFile() te renvoie un résultat de type HRESULT hr
    qui te donne les codes d'erreur associés à la fonction

    hr doit être égal à S_OK si l'opération se passe bien

    tu peux tester le résultat avec cette macro
    ou regarder avec DirectX Error Lookup dans les utilitaires du sdk directx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    #ifndef VerifHR
    	#define VerifHR(x) { hr = (x); if( FAILED(hr) ) { DXUTTrace( __FILE__, (DWORD)__LINE__, hr, L#x, true ); } }
    #endif
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HRESULT hr = E_FAIL;
    VerifHR( D3DXCreateTextureFromFile(...... )

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 54
    Points
    54
    Par défaut
    Je n'arrive pas à trouver de ressources sur DXUTTrace en DX9 ( il semble que c'est apparu à partir du 10 ) ---> me trompe-je ?

    Le type d'erreur qui s'affiche en hex lors de l'arrêt du débogage, ce ne serait pas la valeur du HRESULT ?
    Je n'arrive pas à récupérer sa valeur entière ( je contrôle juste le 0 / 1 du début )
    Il me raconte "Symbole introuvable" sur mon ppTexture ... c'est bien gentil mais je pense que je l'ai initialisé correctement ( ça ne doit pas être le cas ).

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mars 2006
    Messages : 143
    Points : 112
    Points
    112
    Par défaut
    excuses moi, je ne savais pas que tu utilisais DX9

    tu dois inclure le fichier "DXUT.h" et "DXUT.cpp " qui se trouve dans le SDK
    et renseigner les chemins d'accès dans ta solution
    tu pourra alors utiliser la macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define V_RETURN(x)    { hr = (x); if( FAILED(hr) ) { return DXUTTrace( __FILE__, (DWORD)__LINE__, hr, L#x, true ); } }
    qui te donnera un code d'erreur spécifique sur ta sortie

    tu pourra utiliser le DXErrLookup ou l'équivalent DX9 ( pas sur du nom ) des utilitaires du SDK pour un descriptif spécifique

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 54
    Points
    54
    Par défaut
    J'ai autant voire plus de mal à mettre en route le debugger qu'à régler mon problème de texture =D

  6. #6
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Salut en mettant un point d'arrêt sur CreateTextureFromFile tu t'apercevras sans doute que le pointeur sur texture pointe effectivement sur n'importe quoi.
    Maintenant est-ce que tu est sûr du D3DDevice ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 54
    Points
    54
    Par défaut
    Je pense que mon D3DDev est sûr : je l'ai utilisé pour faire mes tests de vertex Buffer.
    Le chemin d'acces "axi.bmp" doit être daubé ... y'a t'il d'autres moyens d'indiquer où on trouve tel fichier ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 54
    Points
    54
    Par défaut
    RESOLU

    J'avais crée un LPDIRECT3DTEXTURE9 *ppTexture
    Tout le problème vient de là
    Voilà le code qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    #include <d3d9.h>
    #include <d3dx9.h>
    #include <d3dx9tex.h>
    #include <d3dx9math.h>
    #include <d3dx9math.inl>
    #include <windows.h>
    #include <windowsx.h>
    #include <iostream>
    #include <string>
    #include "GWindowClass.h"
    #include "VertexBuffer.h"
     
    using namespace std;
     
    #pragma comment (lib, "d3d9.lib")
    #pragma comment (lib, "d3dx9.lib")
     
     
    /**************************************************************************************************************************************/
    LPDIRECT3DTEXTURE9 ppTexture;
    LPD3DXSPRITE sprite ;
    D3DXVECTOR3 pos(10.0f,10.0f,0.0f);
     
     
     
     
    LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ); 
     
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
     
    	GWindow Fenetre;
    	Fenetre.initialization("Ma Fenêtre",10,10,1000,1000,hInstance);
    	Fenetre.D3DInit();
     
    	// SPRITE
    	D3DXCreateTextureFromFile(Fenetre.d3ddev,"..\\axi.bmp",&ppTexture);
     
    	if (D3DXCreateSprite(Fenetre.d3ddev,&sprite ) != 0){
    		MessageBox(NULL,
                   "PB Sprite",
                   "Sprite!",
                   MB_ICONEXCLAMATION | MB_OK);
    	}
    	Fenetre.d3ddev->SetTexture(0,ppTexture);
     
     
     
    	MSG msg;
    		while( 1 ){
    			while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
    				TranslateMessage(&msg);
    				DispatchMessage(&msg);
    			}
     
    			if(msg.message == WM_QUIT){
    				break;
    			}
    			Fenetre.beginRender();
     
    			sprite->Begin(D3DXSPRITE_ALPHABLEND);
    			sprite->Draw(ppTexture,NULL,NULL,&pos,0xFFFFFFFF);
    			sprite->End();
     
    			Fenetre.endRender();			
    		}
     
    	return 0; 
    }
     
    LRESULT CALLBACK GWindow::WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ){
    	switch (msg){
            case WM_DESTROY:
                 PostQuitMessage(0);
    			 return 0;
            default:
                return DefWindowProc(hWnd, msg, wParam, lParam);
    	}
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion de sprite / texture
    Par Clad3 dans le forum ActionScript 3
    Réponses: 5
    Dernier message: 29/01/2011, 19h10
  2. Ressources gratuites (sprites, textures, modèles 3D, sons)
    Par raptor70 dans le forum Contribuez
    Réponses: 56
    Dernier message: 26/12/2009, 20h09
  3. Coordonées de texture et point sprite?
    Par _Pipo_ dans le forum OpenGL
    Réponses: 5
    Dernier message: 17/06/2008, 12h09
  4. Réponses: 4
    Dernier message: 23/03/2007, 12h02
  5. pb de transparence/texture/sprite
    Par Fikus dans le forum DirectX
    Réponses: 6
    Dernier message: 15/05/2004, 22h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo