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 :

[VMR9][D3D9]ecrire un texte sur une surface


Sujet :

DirectX

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2003
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [VMR9][D3D9]ecrire un texte sur une surface
    Salut,

    Je previens tout de suite, j'y connais rien en D3D mais un peu en Dshow

    Mon probleme est que je voudrais afficher un texte en utilisant la fonction IVMRMixerBitmap9::SetAlphaBitmap(...) en passant par une surface 3D, et non pas par le GDI comme c'est fait dans les samples (et oui j'aime bien me compliquer le vie )

    Pour l'instant j'ai reussi à "remplir" la surface avec une image, avec la fonction D3DXLoadSurfaceFromFile(...) et a l'afficher avec le VMR9.

    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
        hr = m_pD3DDevice->CreateOffscreenPlainSurface(	lWidth, lHeight,
    													D3DFMT_X8R8G8B8,
    													D3DPOOL_SYSTEMMEM,
    													&m_pD3DSurface,
    													NULL);
     
    D3DXLoadSurfaceFromFile(m_pD3DSurface,
    							NULL,					// palette
    							NULL,					// entire surface - created to be the proper height
    							pszBitmapFileName,
    							NULL,					// entire image source
    							D3DX_DEFAULT, 
    							0,						// disable color key
    							NULL					// source info
    							);
    	VMR9AlphaBitmap alphaBitmap;
        alphaBitmap.dwFlags			= VMR9AlphaBitmap_EntireDDS | VMR9AlphaBitmap_SrcColorKey;
        alphaBitmap.hdc				= NULL;
        alphaBitmap.pDDS			= m_pD3DSurface;
        alphaBitmap.clrSrcKey		= cTransColor;
        alphaBitmap.rDest.top		= 0.0f;
        alphaBitmap.rDest.left		= 0.0f;
        alphaBitmap.rDest.bottom	= 0.5f;
        alphaBitmap.rDest.right		= 0.5f;
        alphaBitmap.fAlpha			= nAlpha ;
     
    	// show the bitmap
    	hr = pVMRMixerBitmap9->SetAlphaBitmap(&alphaBitmap);

    Mais pour ecrire du texte sur une surface aucune idee... J'ai regarde un peu l'interface ID3DXFont et la methode DrawText(...), mais je ne sais pas ou a lieu le dessin et comment le recuperer pour le mettre dans ma surface.
    donc

    @+

  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 : 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
    L'interface ID3DXFont utilise le GDI pour écrire du texte sur une surface, donc je pense pas que ça t'avance beaucoup .

    Par contre la classe CD3DFont (on fait souvent l'amalgamme des 2 ) gère l'affichage de texte avec des textures, regarde plutot de ce coté. Par contre là tu rentres dans le domaine de la 3D (faudra rendre des polygones etc...), ce sera un peu plus compliqué que de simplement afficher du texte dans une surface puis afficher celle-ci.

    Et si tu veux juste passer par une surface D3D, même en ecrivant dessus en utilisant le GDI, alors c'est simple : tu récupère le hdc de ta surface, et tu utilises DrawText(). C'est comme ça que ID3DXFont fait il me semble.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2003
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    merci pour la reponse
    en fait je m'etait base sur le sample Text3D et puis 2 articles que j'ai touve : ici et la

    voila le petit extrait qui m'avais convaincu
    In previous version of the DirectX SDK, D3DFont was the code to use. D3DXFont was painfully slow and couldn't be used in any performance critical application. In the most recent update, the gap has been narrowed significantly.

    One very nice thing about D3DFont is that you have the source available to you. If you don't like the way it does something you can edit the source and make it work the way you want it to. However, I predict that with the improvements to D3DXFont not much effort will be put into improving D3DFont, so it may not even be included in future SDKs.


    Par contre la classe CD3DFont (on fait souvent l'amalgamme des 2 ) gère l'affichage de texte avec des textures, regarde plutot de ce coté. Par contre là tu rentres dans le domaine de la 3D (faudra rendre des polygones etc...), ce sera un peu plus compliqué que de simplement afficher du texte dans une surface puis afficher celle-ci.
    Et si tu veux juste passer par une surface D3D, même en ecrivant dessus en utilisant le GDI, alors c'est simple : tu récupère le hdc de ta surface, et tu utilises DrawText(). C'est comme ça que ID3DXFont fait il me semble.
    euh pas trop le temps de me plonger dans la 3D (malheureusement ), je pense que je vais suivre ton conseil

    merci

Discussions similaires

  1. Ecrire du texte sur une fenêtre de Jeu vidéo (OSD)
    Par zenway dans le forum DirectX
    Réponses: 7
    Dernier message: 07/03/2009, 14h06
  2. ecrire un texte sur une image
    Par marcel marie dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 12/02/2009, 11h12
  3. Ecrire du texte sur une image
    Par Goofyjp dans le forum Composants VCL
    Réponses: 2
    Dernier message: 11/11/2008, 00h26
  4. [GLFW]Ecrire du texte sur une fenêtre GLFW
    Par iluv dans le forum OpenGL
    Réponses: 14
    Dernier message: 12/04/2006, 16h00
  5. Ecrire du texte sur une Overlay Surface
    Par deakuk dans le forum DirectX
    Réponses: 1
    Dernier message: 17/02/2006, 13h52

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