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 :

Combiner texte et 3D [DirectX 11]


Sujet :

DirectX

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 585
    Points : 1 139
    Points
    1 139
    Par défaut Combiner texte et 3D
    Bonjour à tous.
    Face à ma curiosité toujours à l’affût et à l'abandon plus ou moins programmé de XNA (non, je l'ai pas dit !), je m'intéresse à DirectX (11) via C# et SharpDX. C'est vraiment très bien et relativement simple à maîtriser quand on sait lire les exemples DirectX en C++...
    Pour le moment, je découvre (ça me rappelle Managed DirectX 9 d'il y a... des années !). J'en suis à faire tournoyer des cubes avec gestion de la profondeur, et je voudrais juste afficher un petit texte dans un coin, histoire de voir ce que ça donne en FPS.
    La seule chose qu'on trouve vraiment sur internet quand on s'intéresse au texte en DX11, c'est qu'il y avait en DX10 des classes étudiées pour et qu'elles n'existent plus en DX11, et donc bref qu'il faut de débrouiller avec Direct2D et DirectWrite et que c'est la galère, etc. Soit, débrouillons-nous !
    En décortiquant l'exemple DirectWrite de la doc µSoft sur DX11, j'ai réussi à le C#-iser et à le SharpDX-iser pour afficher le célèbre bonjour à l'écran. Ca, ça fonctionne !
    Par contre, dès que je rajoute l'affichage des cubes, je ne vois plus rien. En fait, c'est la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    swapChain.Present(0, PresentFlags.None);
    qui affiche tout ce que les commandes device.ImmediateContext.DrawIndexed ont préparé qui met le boxon : elle présente à l'écran toute la 3D mais me vire le texte. L'effet est bizarre : le texte clignote, apparaissant environ 1/3 de seconde toutes les 5 à 10 secondes...
    Je cherche donc à rendre compatible l'affichage de texte et de 3D. J'ai dans l'idée que c'est tout simple. Peut-être juste un truc pour faire cohabiter le rendertarget 3D et le rendertarget 2D qui partangent la même fenêtre ? Auriez-vous une idée ?

    Je mets ci-dessous la partie 2D "texte".
    Merci

    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
    //Factory DirectWrite
    var fdw = new SharpDX.DirectWrite.Factory(SharpDX.DirectWrite.FactoryType.Isolated);
    //Format de Texte
    var tf = new SharpDX.DirectWrite.TextFormat(fdw, "Arial", 28);
    tf.TextAlignment = SharpDX.DirectWrite.TextAlignment.Center;
    tf.ParagraphAlignment = SharpDX.DirectWrite.ParagraphAlignment.Center;
    //Créer les ressources d2d
    //- Factory Direct2D
    var fd2d = new SharpDX.Direct2D1.Factory(SharpDX.Direct2D1.FactoryType.SingleThreaded);
    //- RenderTarget
    /*var surface = Surface.FromSwapChain(swapChain, 0); //Vieux souvenir d'un essai précédent...*/
    var renderTargetProperties = new SharpDX.Direct2D1.RenderTargetProperties()
    {
    	DpiX = 0f, DpiY = 0f,
    	Type = SharpDX.Direct2D1.RenderTargetType.Hardware,
    	Usage = SharpDX.Direct2D1.RenderTargetUsage.None,
    	MinLevel = SharpDX.Direct2D1.FeatureLevel.Level_DEFAULT,
    	PixelFormat = new SharpDX.Direct2D1.PixelFormat()
    };
    var hwndRenderTargetProperties = new SharpDX.Direct2D1.HwndRenderTargetProperties()
    {
    	Hwnd = fenêtre.Handle,
    	PixelSize = fenêtre.ClientSize,
    	PresentOptions = SharpDX.Direct2D1.PresentOptions.None
    };
    //Le RenderTarget
    var rt = new SharpDX.Direct2D1.WindowRenderTarget(
    		fd2d,
    		renderTargetProperties,
    		hwndRenderTargetProperties);
    //Un pinceau
    var pn = new SharpDX.Direct2D1.SolidColorBrush(rt, new Color4(0f, 0f, 1f, 0.8f));
    //Le texte
    var texte = "Bonjour les djeunz !";
    Le code dans la boucle de rendu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Dessiner le texte
    rt.BeginDraw();
    rt.Transform = Matrix3x2.Identity;
    rt.Clear(new Color4(0f, 0f, 0f, 1f));
    rt.DrawText(texte, tf, new RectangleF(10f, 10f, 200f, 200f), pn);
    rt.EndDraw();
    Au-dessus de ce bout de code, j'ai la partie rendu 3D, et en-dessous j'ai la ligne swapChain.Present(0, PresentFlags.None);
    Quel que soit l'ordre des lignes, ça ne donne rien.
    L'avis publié ci-dessus est mien et ne reflète pas obligatoirement celui de mon entreprise.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 585
    Points : 1 139
    Points
    1 139
    Par défaut
    Hummm... Le truc qui me gène, c'est que je suis en train de lire un article qui dit que la méthode Direct2D / DirectWrite ne fonctionnerait pas en DirectX 11... Y'a plus que les bitmap font ?
    L'avis publié ci-dessus est mien et ne reflète pas obligatoirement celui de mon entreprise.

  3. #3
    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 : 49
    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
    Points : 2 605
    Points
    2 605
    Par défaut
    Bonjour.

    L'inteface ID3DXFont ne convient pas ?

    Les samples Directx11 l'utilisent.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 585
    Points : 1 139
    Points
    1 139
    Par défaut
    Yes, but no...
    En fait, lorsque je cherche ID3DXFont chez µsoft, je le trouve dans la doc Dirext9. En fouillant à la main, je le trouve aussi dans DirectX10. Dans les 2 cas, c'est dans un chapitre qui s'appelle Classic DirectX Graphics et qui démarre par la phrase :
    This section describes Microsoft DirectX graphics technologies that are minimally supported. This information is provided to support existing applications. We do not recommend using these technologies in new applications.
    (voir ici).
    Si je fouille aussi dans gamedev, par exemple, je trouve cet échange :
    Does DirectX 11 have a ID3DXFont equivalent?
    [...]

    #2MJP Moderators - Reputation: 3461
    Posted 26 July 2010 - 10:37 AM
    Nope, unfortunately it doesn't. [...]
    (voir ).
    Ce qui confirme ce qu'il me semblait avoir vu : à partir de DirectX11 (voire peut-être 10.1), il n'y a plus de gestion des Font. Les exemples que j'ai vus se basaient sur l'utilisation d'une BitmapFont, mais pas question d'utiliser une version "3D" des Arial, Tahoma, Verdana ou autres Times New Roman. J'appelle ça moyennement un progrès
    L'avis publié ci-dessus est mien et ne reflète pas obligatoirement celui de mon entreprise.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 585
    Points : 1 139
    Points
    1 139
    Par défaut
    De toute manière, je ne crois pas que passer de XNA à DirectX soit un progrès : écrire 2 ou 3 fois la même chose, employer 200 lignes là où on n'en avait besoin que de 20, c'est de l'informatique de mes débuts. Sans grand intérêt pour moi de nos jours. Va falloir que je trouve autre chose !

    Edit : dans le genre tenace, j'ai quand même passé une bonne demi-douzaine d'heures à comprendre pourquoi mon rendu restait désespérément noir alors qu'on devait voir tourner un joli cube texturé : le ConstantBuffer était déclaré avec ResourceUsage.Dynamic, et malheureusement Context.UpdateSubresource ne fonctionne pas dans ce cas-là... Un avertissement en tout petit dans une page DirectX que j'ai trouvée quand j'ai enfin réussi à faire fonctionner PixWin et qu'il m'a finalement montré que ma matrice était toujours vide dans le Shader ! L'informatique d'amateur, c'est amusant

    Allez, je rajoute mes FPS !
    L'avis publié ci-dessus est mien et ne reflète pas obligatoirement celui de mon entreprise.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 585
    Points : 1 139
    Points
    1 139
    Par défaut
    Problème résolu : retour en DirectX 10 (ou 10.1).
    En attendant 11.1 ...
    L'avis publié ci-dessus est mien et ne reflète pas obligatoirement celui de mon entreprise.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/01/2012, 17h42
  2. [ODS] Combiner plusieurs Rapports texte en un seul
    Par kmel53 dans le forum ODS et reporting
    Réponses: 5
    Dernier message: 18/10/2011, 12h20
  3. [XSLT] combiner XPATH et texte
    Par jeanjotibo dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 06/02/2008, 19h31
  4. CSS : Flottement de tableaux combiné avec du texte justifié
    Par Nullos Oracle dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 14/10/2005, 02h10
  5. fonction combinée: liste de choix + input text
    Par jflebegue dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 01/09/2005, 18h38

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