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 :

ID3DXFONT - Sample Text3D


Sujet :

DirectX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut ID3DXFONT - Sample Text3D
    Bon c'est peut être un truc tout con, mais je n'arrive pas à trouver dans le source du sample Text3D du SDK comment ils font pour que la taille du texte ne soit pas affectée lors d'un redimensionnement de fenêtre !
    Lorsque moi je code un exemple tout bête (sans utiliser le framework) en utilisant ID3DXFONT pour afficher du texte, le texte rapetit ou s'agrandit selon si on élargit ou pas la fenêtre.
    Quelqun a une idée ?

    Edit : Au passage voila comme je procède


    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
     
    #include <d3d9.h>
    #include <d3dx9.h>
    #include "CWindow.h"
    #include "CWndproc.h"
     
    /* ----- WinMain : Point d'entree Windows ----- */
    int WINAPI WinMain(HINSTANCE hinstance, /* Handle d'instance de l'applciation */
                       HINSTANCE hPrevInstance,/* NULL sous Win32 */
                       LPSTR lpCmdLine,/*Pointeur vers la ligne de commande */
                       int nCmdShow)   /*Indique comment Window affiche la fenetre*/
    {
    	CWindow Main_Window;
     
    	/* Creation de la fenetre */
    	Main_Window.Create(640,480,hinstance,WinProc);
     
    	/* Affichage de la fenetre */
    	Main_Window.Show();
     
    	/* Creation de l'objet Direct3D */
    	LPDIRECT3D9 pD3D = NULL;
    	pD3D = Direct3DCreate9(D3D_SDK_VERSION);
     
    	/* Mode d'affichage */
    	D3DDISPLAYMODE d3ddm;
        pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm);
     
    	/* */
    	D3DCAPS9 d3dCaps;
    	pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,&d3dCaps);
     
    	/* Les flags */
    	DWORD dwBehaviorFlags = 0;
    	dwBehaviorFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
     
    	/* Parametre de creation du Device */
    	D3DPRESENT_PARAMETERS d3dpp;
    	memset(&d3dpp, 0, sizeof(d3dpp));
     
        d3dpp.BackBufferFormat       = d3ddm.Format;
    	d3dpp.SwapEffect             = D3DSWAPEFFECT_DISCARD;
    	d3dpp.Windowed               = TRUE;
        d3dpp.EnableAutoDepthStencil = TRUE;
        d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
        d3dpp.PresentationInterval   = D3DPRESENT_INTERVAL_IMMEDIATE;
     
     
    	/* Creation du peripherique 3D */
    	LPDIRECT3DDEVICE9 pD3Device = NULL;
    	int error = pD3D->CreateDevice(D3DADAPTER_DEFAULT,
    								   D3DDEVTYPE_HAL,
    								   Main_Window.GetHandle(),
    								   dwBehaviorFlags,
    								   &d3dpp,
    								   &pD3Device);
     
    	/* Erreur lors de la creation du device ? */
    	switch(error)
    	{
    		case D3DERR_NOTAVAILABLE:
    			MessageBox(Main_Window.GetHandle(),
    				       "Technique demandee non disponible",
    					   "Erreur: D3DERR_NOTAVAILABLE", 0); 
    			exit(1);
    			break;
     
    		case D3DERR_OUTOFVIDEOMEMORY:
    			MessageBox(Main_Window.GetHandle(),
    				       "Pas assez de memoire pour l'operation demandee.",
    					   "Erreur: D3DERR_OUTOFVIDEOMEMORY", 0); 
    			exit(1);
    			break;
     
    		case D3DERR_INVALIDCALL:
    			MessageBox(Main_Window.GetHandle(),
    				       "Methode appellee invalide",
    					   "Erreur: D3DERR_INVALIDCALL", 0); 
    			exit(1);
    			break;
    	}
     
        /* Desactivation de la lumiere */
        pD3Device->SetRenderState(D3DRS_LIGHTING, false);
     
    	/* Active le Z-Buffer */
    	pD3Device->SetRenderState(D3DRS_ZENABLE, true);
     
     
    	/* Font */
    	LPD3DXFONT My_Font = NULL;
    	D3DXCreateFont(pD3Device,   /* Device D3D */
    				       16,      /* Hauteur */
    				        0,      /* Largeur */
    				  FW_BOLD,   /* Poids   */
    					    1,   /* Nombre de niveau de mipmap */
    					false,   /* Italic ou non ? */
    					DEFAULT_CHARSET,/* Codage des caracteres */
    				    OUT_DEFAULT_PRECIS,
    					DEFAULT_QUALITY,
    					DEFAULT_PITCH | FF_DONTCARE,
    					TEXT("Arial"),
    					&My_Font);
     
    	/* Variable pour stocker les messages a traiter */
        MSG msg;
    	/* Boucle principale */
    	while(1)
    	{
    	    /* Est ce qu'il y a un message ? */
    		if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
            {
    			/* Message pour quitter l'application ? */
    			if(msg.message == WM_QUIT)
    				break;
                /* On passe la main pour le traitement du message */
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
    		/* Aucun message on continu l'affichage */
    		else
    		{
    			RECT m_rc;
    			/* Fonction principale pour le 'rendering' */
    			pD3Device->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
    							 D3DCOLOR_ARGB(0, 45, 50, 170), 
    							 1.0f,
    							 0);
     
    			/* Dessin de la scene */
    			pD3Device->BeginScene();
    				/* Matrice d'environnement : */
    			        D3DXMATRIX matWorld;
    				D3DXMatrixIdentity(&matWorld);
    				D3DXMatrixTranslation(&matWorld,0.0,0.0,2.0);
    				pD3Device->SetTransform(D3DTS_WORLD, &matWorld);
     
    				/* Matrice de vue */
    				D3DXVECTOR3 vEyePt( 0.0f, 0.0f,-5.0f );
    				D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
    				D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
    				D3DXMATRIX matView;
    				D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
    				pD3Device->SetTransform(D3DTS_VIEW, &matView);
     
    				/* Matrice de projection : perspective */
    				D3DXMATRIX matProj;
    				D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, 1.0f, 0.0f, 100.0f);
    				pD3Device->SetTransform(D3DTS_PROJECTION, &matProj);
     
    				/* Dessin */
    				SetRect(&m_rc, 150, 200, 0, 0); 
    				My_Font->DrawText(NULL, "Hello Developpez.com", -1, &m_rc, DT_NOCLIP, D3DXCOLOR(1.0f, 1.0f, 0.0f, 1.0f ));
    			pD3Device->EndScene();
     
    			/* Affichage du back buffer */
    			pD3Device->Present(NULL,NULL,NULL,NULL);
            }
    	}
     
    	/* Liberation de la memoire */
        pD3Device->Release();
        pD3D->Release();
     
    	return 0;
    }
    Au debut j'avais pensé à une histoire de perte du device, chose que je ne maitrise pas encore, (y avait pas ça en OpenGL ), mais aprés quelques tutoriaux et quelques tests pour voir si à un moment on perd le device, cela ne se produit jamais. Donc je ne sais pas

  2. #2
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Faut voir ce qu'ils font au niveau du redimensionnement de la fenêtre, donc à la réception de WM_SIZE ou bien dans le callback associé s'il y en a un (avec le "nouveau" framework).

    Peut-être qu'ils redéfinissent juste le viewport ?

  3. #3
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut
    Oui j'avais déja regardé ce que faisait le tutorial à la réception de WM_SIZE : bah elle fait rien
    Maintenant faut voir aux entrailles du framework et ça j'ai pas encore trouvé mais je continue les recherches.
    Et pour le viewport, les transformations classiques n'affectent pas les textes écris par ID3DXFONT.

  4. #4
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut
    Bon à priori le framework se comptente de redimensionner le backbuffer aux nouvelles dimensions de la fenêtre. Rien de bien folichons, je vais essayer de faire de même peut être que tout vient de la.

  5. #5
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut
    Je confirme, lors d'un redimensionnement de fenêtre il faut Release ID3DXFONT, redimensionner le backbuffer, et recréer la font aprés le reset du Device avec les nouveaux D3DPRESENT_PARAMETERS.

    Avec tout ça, la police reste à la taille voulue

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

Discussions similaires

  1. ID3DXFont et bitmap
    Par izbad dans le forum DirectX
    Réponses: 19
    Dernier message: 29/04/2005, 10h32
  2. player et capture samples
    Par beub63 dans le forum DirectX
    Réponses: 4
    Dernier message: 15/04/2005, 12h22
  3. inclinaison d'un texte avec l'objet ID3DXFont v2
    Par tibyann dans le forum DirectX
    Réponses: 3
    Dernier message: 30/06/2004, 14h27
  4. inclinaison d'un texte avec l'objet ID3DXFont
    Par tibyann dans le forum DirectX
    Réponses: 8
    Dernier message: 21/06/2004, 16h00
  5. XML sample can't be loaded...
    Par coca dans le forum XMLRAD
    Réponses: 2
    Dernier message: 03/11/2003, 12h11

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