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 :

[Direct Graphics 2d] : problème pour afficher une image


Sujet :

DirectX

  1. #1
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut [Direct Graphics 2d] : problème pour afficher une image
    Bonjour, je débute en programmation avec directX 8.
    J'aimerais afficher une image mais ca ne marche pas. pourtant j'obtient bien les informations sur l'image, l'application se alnce, l'écran est remplit avec la couleur que je veux mais la texture ne se dessine pas, pourquoi ?

    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
     
     
    // initialisation et création d'une fenêtre
    ...
    	lpDD=Direct3DCreate8(D3D_SDK_VERSION);
        if( lpDD == NULL )
    	{
    		MessageBox(hwnd, "Impossible de créer l'objet Direct3D !", "Erreur", MB_OK | MB_ICONEXCLAMATION );
    		PostQuitMessage(0);
    		return 0;
    	}
     
    	D3DPRESENT_PARAMETERS d3dpp;
    	ZeroMemory(&d3dpp,sizeof(D3DPRESENT_PARAMETERS));
    	d3dpp.BackBufferWidth=800;
    	d3dpp.BackBufferHeight=600;
    	d3dpp.BackBufferFormat=D3DFMT_A8R8G8B8; // 32 bits par pixel avec 8 bits par couleur (+ 8 bits pour transparence)
    	d3dpp.BackBufferCount=2;
    	d3dpp.hDeviceWindow=0; // fenêtre qui possède le focus
    	d3dpp.SwapEffect=D3DSWAPEFFECT_FLIP;
    	d3dpp.Windowed=false;
    	d3dpp.FullScreen_RefreshRateInHz=75;
     
    	// Communication avec le matériel
    	LPDIRECT3DDEVICE8 periph3d; // objet correspondant à la carte 3d
    	HRESULT hr=lpDD->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,&d3dpp,&periph3d);
     
    	// sprite
    	LPD3DXSPRITE routineSprite;
    	D3DXCreateSprite(periph3d,&routineSprite);
     
    	// image
    	LPDIRECT3DTEXTURE8 image;
    	// charger l'image et récupérer des infos dessus (notamment la hauteur et la largeur)
    	D3DXIMAGE_INFO imageInfo;
    	ZeroMemory(&imageInfo, sizeof(D3DXIMAGE_INFO));
    	if( FAILED( hr = D3DXGetImageInfoFromFile( "c:\\back.bmp", &imageInfo ) ) )
    		MessageBox(hwnd,"marche pas","prob",0);
     
    	hr = D3DXCreateTextureFromFileEx( periph3d,
    			"c:\\back.bmp",
    			imageInfo.Width,
    			imageInfo.Height,
    			1,
    			0,
    			D3DFMT_UNKNOWN,
    			D3DPOOL_MANAGED,
    			D3DX_DEFAULT,
    			D3DX_DEFAULT,
    			0,
    			&imageInfo,
    			NULL,
    			&image
    		);
     
    	//infos sur la texture
    	D3DSURFACE_DESC Infos;
    	ZeroMemory(&Infos, sizeof(D3DSURFACE_DESC));
    	image->GetLevelDesc( 0, &Infos );
     
    	// commencer le rendu
    	periph3d->BeginScene();
    	periph3d->Clear(0,0,D3DCLEAR_TARGET,0x0000FFFF,0.0,5);
     
    	periph3d->SetRenderState(D3DRS_LIGHTING, FALSE);
    	periph3d->SetTexture(0,image);
    	routineSprite->Begin();
    	hr=routineSprite->Draw(image,0,&D3DXVECTOR2(10,10),0,0,&D3DXVECTOR2(10,10),1);
    	routineSprite->End();
    	periph3d->EndScene();
    	Sleep(2000);
    	periph3d->Present(0,0,0,0);
    Pouvez vous m'aidez svp ?
    Merci
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Points : 121
    Points
    121
    Par défaut
    Salut !!

    Rassure moi : c'est la fonction d'initialisation de DGraphics ca ?
    Je suggere que oui.

    La tu demandes tout simplement d'afficher l'image chargée, ce qui se fait probablement. Mais tu ne demandes de le faire qu'une fois ! Au moment de l'init !!

    En fait, tu dois faire un truc comme ca :
    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
     
    while(1)
    	{ 
    		if( PeekMessage(&Msg, NULL, 0, 0, PM_NOREMOVE) )
    		{
    			if( Msg.message==WM_QUIT || (Msg.message==WM_KEYDOWN && Msg.wParam==VK_ESCAPE) )
    				break;
    			if ( !GetMessage(&Msg, NULL, 0, 0) )	break;
    				DispatchMessage(&Msg);
    		}
    		else
    		{
    			if( !Update(hDlg) ) break;
    		}
    	}
    Avec dans bool Update(HWND) le code qui affiche ton image.
    Cordialement
    OS : WinXP
    Outils : VC++ 8 (Visual Studio 2005)

  3. #3
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    Pour l'instant, j'aimerais déja rriver à afficher une image et après seulement je verrais car ca sert à rien d'avancer si j'arrive aps à afficher une image ou un sprite...
    Merci
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Points : 121
    Points
    121
    Par défaut
    C'est ce que je te dis !
    A moins d'avoir des yeux hyper rapides, tu n'es pas pret de voir ton image avec le code que tu as fait : tu es obligé de procédé par boucle. Tu ne manies pas le GDI la, mais DX qui n'a aucunes instructions, puisque tu as executé EndScene().

    cordialement
    OS : WinXP
    Outils : VC++ 8 (Visual Studio 2005)

  5. #5
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    Là, je comprends pas, y'a un truc qui m'échappe : tu veux dire que l'image une fois copié dans le buffer doit être actualisé en permanence ?

    Pourrais tu me dire exactement ce que je dois mettre dans la fonction bool Update(HWND). Je suppose qu'il ne faut pas mettre toutes les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	periph3d->BeginScene();
    	periph3d->Clear(0,0,D3DCLEAR_TARGET,0x0000FFFF,0.0,5);
     
    	periph3d->SetRenderState(D3DRS_LIGHTING, FALSE);
    	routineSprite->Begin();
    	routineSprite->Draw( image, 0, &echelle, &centreDeRotation, 0,
    				&translation, 0 );
    	routineSprite->End();
    	periph3d->EndScene();
    	//Sleep(2000);
    	periph3d->Present(0,0,0,0);
    Désolé, mais j'ai vraiment du mal
    Merci
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Points : 121
    Points
    121
    Par défaut
    Salut !!

    Exactement : l'image est copiée dans le buffer. Mais rien ni personne ne dit a DX d'affichier le contenu du buffer. En fait, si, mais une seule fois. Donc des qu'elle est affiché, DX execute EndScene() et la plus d'image.

    Voici le code d'un Update(HWND) (le mien, simplifié)
    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
     
    bool Update(HWND hWnd)
    {
    	static float CurrentTime = DXUtil_Timer(TIMER_GETABSOLUTETIME);
     
    	if(IsIconic(hWnd)) Sleep(50);		//dodo si couché
    	else if(  DXUtil_Timer(TIMER_GETABSOLUTETIME)-CurrentTime>0.015f)	//64 fps ( 1/fps. calculé par 1/66 mais a cause des arrondis on a 64fps !)
    	{
    		//-----------Préparation du device pour l'affichage-----
    		g_Device->Clear(NULL,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1.0f,0);
    		g_Device->BeginScene();
     
    		CurrentTime = DXUtil_Timer(TIMER_GETABSOLUTETIME);
     
    		//-----------Acquisition des données périphériques---
                                   //------------Dessin et calcul d'une frame-------------
    routineSprite->Draw( image, 0, &echelle, &centreDeRotation, 0, 
                &translation, 0 ); 
     
    		//-----------Affichage de la frame----------------------
    		g_Device->EndScene();
     
    		if( g_Device->Present(NULL,NULL,NULL,NULL) == D3DERR_DEVICELOST )
    			g_Device->Reset(&g_d3dpp);
    	}
    	return true;
    }
    Bien evidemment mon device s'appele g_Device, et j'ai laissé routineSprite tel quel.
    sache que periph3d->SetRenderState(D3DRS_LIGHTING, FALSE); n'est a faire que lors de l'initialisation de DGraphics, lmais pas a chaque frame !


    cordialement
    OS : WinXP
    Outils : VC++ 8 (Visual Studio 2005)

  7. #7
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    dd1 error LNK2019: symbole externe non résolu "float __stdcall DXUtil_Timer(enum TIMER_COMMAND)" (?DXUtil_Timer@@YGMW4TIMER_COMMAND@@@Z) référencé dans la fonction "bool __cdecl Update(struct HWND__ *,struct IDirect3DTexture8 *)" (?Update@@YA_NPAUHWND__@@PAUIDirect3DTexture8@@@Z)
    J'ai bien fait le mais il doit me manquer le lib. Le problème c'est que je n'est rien trouvé dans la doc du compilo ou sur la msdn, je dois inclure quoi ?
    Merci
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  8. #8
    Membre actif Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Points : 272
    Points
    272
    Par défaut
    Voici la liste des libs de Dx9 ( sof dx play et petits API )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dsound.lib 
    dinput8.lib 
    dxerr9.lib 
    d3dx9.lib 
    d3d9.lib 
    d3dxof.lib 
    dxguid.lib
    PS :pour trouver les libs ou header ds la doc Dx9 cherche le nom d'une fonction et regarde en bas

    PS2 : Je crois que l'utilisation de timeGetTime() dans un petit prog est plus judicieuse ( winmm.lib )

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    J'ai bien fait le
    Reste plus qu'à ajouter Dxutil.cpp à ton projet maintenant.

  10. #10
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    Le cpp est bien dans le projet comme tous les lib mais ca ne change rien...
    je comprends pas

    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
     
    ...
    </Filter>
    		<File
    			RelativePath="..\..\..\..\..\Program Files\DxSDK\Lib\DxErr8.lib">
    		</File>
    		<File
    			RelativePath="..\..\..\..\..\Program Files\DxSDK\Lib\DxErr9.lib">
    		</File>
    		<File
    			RelativePath="..\..\..\..\..\Program Files\DxSDK\Lib\d3d8.lib">
    		</File>
    		<File
    			RelativePath="..\..\..\..\..\Program Files\DxSDK\Lib\d3d9.lib">
    		</File>
    		<File
    			RelativePath="..\..\..\..\..\Program Files\DxSDK\Lib\d3dx8.lib">
    		</File>
    		<File
    			RelativePath="..\..\..\..\..\Program Files\DxSDK\Lib\d3dx9.lib">
    		</File>
    		<File
    			RelativePath="..\..\..\..\..\Program Files\DxSDK\Lib\d3dx9d.lib">
    		</File>
    		<File
    			RelativePath="..\..\..\..\..\Program Files\DxSDK\Lib\d3dxof.lib">
    		</File>
    		<File
    			RelativePath="..\..\..\..\..\Program Files\DxSDK\Lib\dinput.lib">
    		</File>
    		<File
    			RelativePath="..\..\..\..\..\Program Files\DxSDK\Lib\dsound.lib">
    		</File>
    		<File
    			RelativePath="..\..\..\..\..\Program Files\DxSDK\Lib\dxguid.lib">
    		</File>
    		<File
    			RelativePath="dxutil.cpp">
    		</File>
    	</Files>
    	<Globals>
    	</Globals>
    Je viens d'essayer avec l'autre fonction et ca compil mais l'exécution ne donne rien : rien ne s'affiche. Voici mon code, parceque (encore une fois ), je vois pas d'ou ca vient :
    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
     
    lpDD=Direct3DCreate8(D3D_SDK_VERSION);
        if( lpDD == NULL )
    	{
    		MessageBox(hwnd, "Impossible de créer l'objet Direct3D !", "Erreur", MB_OK | MB_ICONEXCLAMATION );
    		PostQuitMessage(0);
    		return 0;
    	}
     
    	ZeroMemory(&d3dpp,sizeof(D3DPRESENT_PARAMETERS));
    	d3dpp.BackBufferWidth=800;
    	d3dpp.BackBufferHeight=600;
    	d3dpp.BackBufferFormat=D3DFMT_A8R8G8B8; // 32 bits par pixel avec 8 bits par couleur (+ 8 bits pour transparence)
    	d3dpp.BackBufferCount=2;
    	d3dpp.hDeviceWindow=0; // fenêtre qui possède le focus
    	d3dpp.SwapEffect=D3DSWAPEFFECT_FLIP;
    	d3dpp.Windowed=false;
    	d3dpp.FullScreen_RefreshRateInHz=75;
     
    	// Communication avec le matériel
    	HRESULT hr=lpDD->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,&d3dpp,&periph3d);
     
    	// sprite
    	D3DXCreateSprite(periph3d,&routineSprite);
     
    	// image
    	LPDIRECT3DTEXTURE8 image;
    	// charger l'image et récupérer des infos dessus (notamment la hauteur et la largeur)
    	D3DXIMAGE_INFO imageInfo;
    	ZeroMemory(&imageInfo, sizeof(D3DXIMAGE_INFO));
    	if( FAILED( hr = D3DXGetImageInfoFromFile( "back.bmp", &imageInfo ) ) )
    		MessageBox(hwnd,"marche pas","prob",0);
     
     
    	//D3DXCreateTextureFromFile(periph3d,"c:\\back.bmp",&image);
    	hr = D3DXCreateTextureFromFileEx( periph3d,
    			"back.bmp",
    			imageInfo.Width,
    			imageInfo.Height,
    			1,
    			0,
    			D3DFMT_UNKNOWN,
    			D3DPOOL_MANAGED,
    			D3DX_FILTER_NONE,
    			D3DX_DEFAULT,
    			0,
    			&imageInfo,
    			NULL,
    			&image
    		);
     
    	MSG msg;
    	while(1) // boucle infinie pour le jeu
    	{	
    		if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) //  vérifie si des messages sont présents
    		{	
     
    			if( msg.message==WM_QUIT || (msg.message==WM_KEYDOWN && msg.wParam==VK_ESCAPE) ) 
    				break;
    			if(!GetMessage(&msg, NULL, 0, 0))
    				return msg.wParam;
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    		else
    		{
    			Update(hwnd,image);
    		}
    	}
    L'image 24 bits ne s'affiche pas, y'a que du noir partout

    Merci
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  11. #11
    Membre actif Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Points : 272
    Points
    272
    Par défaut
    Je comprend pas grand chose à ce code ( il est pas complet )
    En voici un meilleur :
    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
     
    //Inclu l'API DirectX Graphics
    #include <d3d9.h>
    #include <d3dx9core.h>
     
    //Variables globales
    LPDIRECT3D9             g_pD3D       = NULL; //Déclaration de l'objet D3D
    LPDIRECT3DDEVICE9       g_pd3dDevice = NULL; //Déclaration de l'objet périphérique de rendu
    // on déclare notre objet
    LPD3DXSPRITE routineSprites=NULL;
    // image
    LPDIRECT3DTEXTURE9 image;
    D3DXIMAGE_INFO imageInfo;
     
    //Initialise Direct3D
    bool InitD3D(HWND hWnd)
    {
        //Si la création de l'objet échoue, on retourne FALSE
        if((g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
            return FALSE;
     
        //Cette partie initialise une structure qui permettra ensuite de créer l'objet périphérique de rendu
        D3DPRESENT_PARAMETERS d3d_pp;
     
        ZeroMemory(&d3d_pp, sizeof(d3d_pp));
     
        d3d_pp.Windowed = TRUE;
        d3d_pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
        d3d_pp.BackBufferFormat = D3DFMT_UNKNOWN;
     
        //Créé l'objet périphérique de rendu, si il y a une erreur, on retourne FALSE
        if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
    								   D3DDEVTYPE_HAL,
    								   hWnd,
    								   D3DCREATE_SOFTWARE_VERTEXPROCESSING,
    								   &d3d_pp,
    								   &g_pd3dDevice)))
        {
            return FALSE;
        }
    // sprite
       D3DXCreateSprite(g_pd3dDevice,&routineSprites);
     
       // charger l'image et récupérer des infos dessus (notamment la hauteur et la largeur)
     
       ZeroMemory(&imageInfo, sizeof(D3DXIMAGE_INFO));
       if( FAILED(D3DXGetImageInfoFromFile( "back.bmp", &imageInfo ) ) )
          MessageBox(hWnd,"marche pas","prob",0);
     
     
        HRESULT hr = D3DXCreateTextureFromFileEx( g_pd3dDevice,
             "back.bmp",
             imageInfo.Width,
             imageInfo.Height,
             1,
             0,
             D3DFMT_UNKNOWN,
             D3DPOOL_MANAGED,
             D3DX_FILTER_NONE,
             D3DX_DEFAULT,
             0,
             &imageInfo,
             NULL,
             &image
          ); 
        //OK
        return TRUE;
    }
     
     
     
     
    //Quit() permet de quitter l'application correctement (en libérant la mémoire utilisée)
    void Quit()
    {
    	//Si l'objet de périphérique de rendu existe, on le supprime.
        if(g_pd3dDevice) 
            g_pd3dDevice->Release();
     
    	//Si l'objet Direct3D existe...
        if(g_pD3D)
            g_pD3D->Release();
    }
     
     
    //Affiche le rendu
    void Render()
    {
    	//Si l'on a pas d'objet périphérique de rendu, on quitte
        if(g_pd3dDevice == NULL)
            return;
     
        //On affiche un fond jaune à la place du rendu précédent
        g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 255, 0), 1.0f, 0);
     
        //On commence le rendu
        if(SUCCEEDED(g_pd3dDevice->BeginScene()))
        {
    		//C'est ici généralement que l'on insère les fonctions de dessin
    	routineSprites->Draw( image, NULL, NULL, NULL, 0,
    			NULL,D3DCOLOR_XRGB(255, 255,255)  );
    		//Fin de la scène
            g_pd3dDevice->EndScene();
        }
     
        //Affiche le dernier rendu
        g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
    }
     
     
     
     
    //Gère les messages windows
    LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
    {
        switch(msg)
        {
            case WM_DESTROY:
    			{
    				Quit();
    				PostQuitMessage(0);
    				return 0;
    				break;
    			}
            case WM_PAINT:
    			{
    				Render();
    				ValidateRect( hWnd, NULL );
    				return 0;
    				break;
    			}
    		default:
    			break;
        }
     
        return DefWindowProc(hWnd, msg, wParam, lParam);
    }
     
     
     
     
    //Fonction principale
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    {
    	MSG msg;
     
        //Initialise puis enregistre la classe de fenêtre
        WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, 
                          GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                          "DeusXL", NULL };
        RegisterClassEx(&wc);
     
        //Créer la fenêtre principale
        HWND hWnd = CreateWindow("DeusXL", "DirectX 9.0", 
                                  WS_OVERLAPPEDWINDOW, 100, 100, 640, 480,
                                  GetDesktopWindow(), NULL, wc.hInstance, NULL );
     
        // Initialize Direct3D
        if(InitD3D(hWnd))
        { 
            //Affiche la fenêtre
            ShowWindow( hWnd, SW_SHOWDEFAULT );
            UpdateWindow( hWnd );
     
            //Boucle de gestion des messages
            while(GetMessage(&msg, NULL, 0, 0))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
     
    	//Supprime la classe de fenêtre "daron"
        UnregisterClass("DeusXL", wc.hInstance);
     
    	//Fin du programme
    	return 0;
    }
    Ce code est quasi recopié d'un tuto , je n'é pas le temps de le vérifier et la fonction Quit() nest pas finie ( il faut libérer les tex, sprites...)

    PS :libs : d3dx9.lib et d3d9.lib, compile : Win32 app et d3d 9.0
    (Pour passer au 8.0 change les " 9 " en " 8 ")

    [EDIT]
    Ca fonctionne a merveille
    [/EDIT]

  12. #12
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 011
    Points : 1 375
    Points
    1 375
    Par défaut
    Salut,

    J'aimerais bien savoir pourkoi ce code ne marche pas chez moi ???

    J'ai une erreur à la compilation :
    error C2660: 'ID3DXSprite:raw'*: la fonction ne prend pas 7 arguments
    J'ai installé le SDK Directx9 Update Summer 2004. C'est peut être pour ça ? Et dans ce cas que dois-je garder et retirer comme paramètres?

  13. #13
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    J'ai installé le SDK Directx9 Update Summer 2004. C'est peut être pour ça ? Et dans ce cas que dois-je garder et retirer comme paramètres?
    Oui, cette fonction a changé entre temps. Voir la doc du SDK pour les paramètres.

  14. #14
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 011
    Points : 1 375
    Points
    1 375
    Par défaut
    Ok pour le changement de paramètre, mais même en faisant routineSprites->Draw( image, NULL, NULL, NULL,D3DCOLOR_XRGB(255, 255,255) ); j'arrive toujours pas à voir l'image ?

Discussions similaires

  1. Problème pour afficher une image
    Par malbaladejo dans le forum Silverlight
    Réponses: 6
    Dernier message: 25/11/2008, 16h43
  2. [MySQL] Problème pour afficher une image dont le chemin est stocké dans la bdd
    Par cel.Saint-Louis dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/11/2007, 08h49
  3. [AJAX] Afficher une image GD avec ajax
    Par darkvodka dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/06/2007, 00h43
  4. Problème pour afficher une image bmp
    Par homeostasie dans le forum MFC
    Réponses: 6
    Dernier message: 08/05/2005, 18h36
  5. [MFC]Problème pour afficher une image.
    Par Deedier dans le forum MFC
    Réponses: 4
    Dernier message: 25/03/2005, 16h13

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