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 et bitmap


Sujet :

DirectX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Par défaut ID3DXFont et bitmap
    bonjour,

    j'aimerai afficher un bitmap qui est en mémoire ...en fait j'écris moi meme le bitmap dans mon programme (c pas gros je veu juste écrire un symbole du genre croix sur 9 pixels)...

    je me suis laissé dire que je pourrai y arriver en considérant ce bitmap comme une font bitmap mais je ne sais pas coment faire ..tous les exemples que je trouve lisent la font et/ou le bitmap dans un fichier externe ce qui n'est pas mon cas...

    si vous avez une idée, merci d'avance...

  2. #2
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Si tu veux te servir de ce bitmap comme texture, je te conseille la fonction D3DXLoadTextureFromResource(..);

    Je l'ai utilisé une fois et ça ne fonctionnait que si je lockait la texture dans la mémoire avec au préalable un loadresource. Mais bizarrement ça ne fonctionnait pas sur tous les ordis.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Par défaut mouais
    ouais je vais regarder..en fait j'ai deja essayé en créant des sprites et en "collant" la texture dessus mais ça marche pas...je n'ai qu'un rectangle tout noir.....et pas moyen de changer ça..c pour ça que je me suis dit essayons avec une font en bitmap...

  4. #4
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Dones nous un peu de code il n'y a pas de raison que ça ne fonctionne pas avec les méthodes classiques.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Par défaut code
    voici mojn code...j'ai modifié la table de couleurs de façon à ce que quand un pixel doit etre allumé, alpha est opaque et sinon il est transparant...

    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
     
    	LPDIRECT3DDEVICE9 pDevice = ((CATD3DGraphicWindow*)_support) -> m_pDevice;
    	if ( NULL == pDevice ) return;
     
    	ID3DXSprite * BitmapSprite=NULL;
     
    	HRESULT hr=D3DXCreateSprite(pDevice,&BitmapSprite);
     
    	IDirect3DTexture9 * pTexture = NULL;
     
     
    	if ( FAILED ( D3DXCreateTexture( pDevice, 16,16, 1,D3DX_DEFAULT, D3DFMT_P8, D3DPOOL_MANAGED, &pTexture )))
    		return;
     
    	D3DLOCKED_RECT rect;
    	if ( FAILED ( pTexture->LockRect (0, &rect, NULL, 0 )))
    		{
    			pTexture->Release();
    			return;
    		}
     
     
    			int size = 256;
    			memcpy (rect.pBits,fontbits[symbol], size);
     
    			pTexture->UnlockRect ( 0 );												
     
    		pDevice->SetTexture(0, pTexture);	
    /*****************************************************************************************************/
    	//deals with color palette
    	unsigned int NumPaletteCourant;
     
    	HRESULT PaletteResult=pDevice->GetCurrentTexturePalette(& NumPaletteCourant);
     
    	PALETTEENTRY PaletteTexture[256];
    	for(int i = 0; i < 256; i ++)
    	{
    	  PaletteTexture[i].peRed = 0;
    	  PaletteTexture[i].peGreen = 255;
    	  PaletteTexture[i].peBlue = 0;
    	  PaletteTexture[i].peFlags =255;
    	} 
     
    	  PaletteTexture[1].peFlags =255;
     
    	  PaletteTexture[0].peFlags =0;
     
    	unsigned int NumPaletteTexture=NumPaletteCourant+1;
     
    	HRESULT PaletteResult3=pDevice->SetPaletteEntries(NumPaletteTexture,PaletteTexture);
     
    	HRESULT PaletteResult4=pDevice->SetCurrentTexturePalette(NumPaletteTexture);
    /*****************************************************************************************************/
    	RECT rectangle;
    	rectangle.bottom=0;
    	rectangle.left=0;
    	rectangle.top=8;
    	rectangle.right=8;
     
    	D3DXVECTOR3 centre,position;
    	centre[0]=4;
    	centre[1]=4;
    	centre[2]=0;
    	position[0]=0;
    	position[1]=0;
    	position[2]=0;
     
    	D3DXMATRIX mat;
    	D3DXMatrixIdentity(&mat); 
     
    	D3DXMATRIX view,world,proj,mat2;
     
    	pDevice->GetTransform(D3DTS_VIEW, &view); 
    	pDevice->GetTransform(D3DTS_WORLD, &world); 
     
    	BitmapSprite->SetWorldViewLH(&world,&view);
     
        for (i = nb_points - 1; i >= 0; i--)
        {
    	BitmapSprite->Begin(D3DXSPRITE_BILLBOARD);
     
    	D3DXMatrixTranslation(&mat,points[j],points[j+1]-1,points[j+2]+9);
     
    	BitmapSprite->SetTransform(&mat);
     
    	BitmapSprite->Draw(pTexture,
    					   &rectangle,
    					   &centre,
    					   NULL,
    					   NULL);
     
          j += 3;
    	  BitmapSprite->End();
        }
    	pTexture->Release();
    	pTexture=0;
    	BitmapSprite->Release();
    	pDevice->SetTexture( 0, 0 );
    	HRESULT PaletteResult5=pDevice->SetCurrentTexturePalette(NumPaletteCourant);

  6. #6
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Est-ce que tu utilises les fonctions "SetRenderState". Et avec quels paramètres les utilises-tu. Le problème peut se situer ici.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Par défaut euhh
    euhh nan pas spécialement à ce niveau la du code...selon toi quelles sont les setrenderstate à faire à cet endroit ??

  8. #8
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Ben pour les sprites je les utilses pas mais tudois avoir des exemples quelques part.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Par défaut mouaif
    ba c'est pas faute d'avoir cherché...si qqun a une idée ou une bonne addresse je suis preneur !!

  10. #10
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Apparemment c'est dans l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BitmapSprite->Begin(D3DXSPRITE_BILLBOARD);
    que tu passes les paramètres. Tu peux tester ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BitmapSprite->Begin(D3DXSPRITE_BILLBOARD | D3DXSPRITE_ALPHABLEND);
    J'ai l'impression que tu as un problème avec les couleurs et les palettes.
    Il faut chercher de ce côté je pense.
    Je teste ton code et je vois.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Par défaut précision
    merci beaucoup pour ton aide..voila mon tableau que je veux faire passer en texture...

    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
     
    static byte fontbits[][81]=
    	{
    		{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
    		 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
    		 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
    		 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
    		 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
    		 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
    		 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
    		 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
    		 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},// 0  None
    		{0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
    		 0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,
    		 0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,
    		 0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x0,
    		 0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,
    		 0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x0,
    		 0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,
    		 0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,
    		 0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0}// 1  CROSS
    	};
    ah oui ...j'ai changé les dimensions...il n'y a plus 16*16 mais 9*9 comme tu peux le constater..mais alors peut etre y aura-t-il un problème étant donné que ce n'est pas un multiple de 2...

    merci pour ton aide !!

  12. #12
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Déjà c'est un tableau de 8x9...

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Par défaut oups
    effectivement... j'ai corrigé ça mais mon problème malheureusement demeure...

  14. #14
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    D3DXVECTOR3 centre,position;
     
    for (i = nb_points - 1; i >= 0; i--)
        {
       BitmapSprite->Begin(D3DXSPRITE_BILLBOARD);
     
       D3DXMatrixTranslation(&mat,points[j],points[j+1]-1,points[j+2]+9);
    position il sert à quoi.
    nb_points et points c'est quoi les valeurs.

  15. #15
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Le mieux tu m'envoies tout le code correspondant par MP (surtout si c'est long) qui compile et qui s'exécute parce que là il manque des choses et je ne vois pas ou tu fais les initialisations ou le rendu.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Par défaut suite...
    position ne sert a rien, vu que il est initialisé a 0, ce qui revient à mettre NULL donc je ne l'utilise pas (il faut d'ailleurs que je le supprime).

    quand à points et nb_points, je suis absolument sur que leur valeur sont correctes....

    malheureusement je ne peux pas t'envoyer mon code qui compile..celui ci est beaucoup trop important et surtout confidentiel....je suis vraiment désolé....

  17. #17
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Prépares juste un code ou il n'y a que l'histoire du sprite que tu n'arrives pas à afficher. Je me débrouillerais avec.

    Utilise les méthodes suivantes:

    -> déclaration du sprite
    -> initialisation du sprite
    -> rendu du sprite
    -> release du sprite

    Tu mets une initialisation de directx basique. Juste une fenêtre ou doit s'afficher ton sprite.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Par défaut
    pour le code complet du sprite, il est sur la page précédente, depuis l'initialisation du sprite jusk'au rendu et au release...

    pour un code complet qui tourne je vais voir ce que je peux faire...

    merci pour ton aide

  19. #19
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    quand à points et nb_points, je suis absolument sur que leur valeur sont correctes....
    Sans ces valeurs je ne peux pas tester, et à priori je ne vois pas d'erreur pour l'instant.

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Par défaut
    le plus simple c de tester juste sur 1 point...tu fous une coordonnées 3D au pif avec un seul point...si ça marche c bon..moi je ferai une boucle sur tous mes points...la coordonée n'a vraiment pas d'importance

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/10/2002, 18h26
  2. transfert d'un fichier bitmap en socket tcp
    Par localhost dans le forum C++Builder
    Réponses: 5
    Dernier message: 29/07/2002, 00h40
  3. Pb Lecture de bitmap monochrome
    Par Loïc38 dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/07/2002, 18h24
  4. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    Réponses: 18
    Dernier message: 28/06/2002, 12h01
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

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