Centrer et clipper du texte avec DirectX

Centrer et clipper du texte avec DirectX - Programmation

Marsh Posté le 05-04-2002 à 14:39:20    

La gestion du texte est un peu compliquée avec Windows....
Pour afficher du texte en 2D avec DirectX j'utilise l'interface ID3DXFont. Je choisis les caractéristiques de la fonte avec D3DXCreateFontIndirect() et je dessine du texte avec DrawText().
Le problème c'est que DirectX permet de centrer le texte OU de le clipper....
Dans DrawText() y a un paramètre de type RECT qui définis la zone ou le texte va être affiché. Il est clippé si il dépasse. Si on utilise le flag DT_CENTER, le texte sera centré en fonction du paramètre RECT.
Mais si on veut clipper le texte ET le centrer par rapport à d'autre coordonnées je vois pas comment faire :(
Il semble ici uniquement possible de centrer et clipper le texte par rapport à l'unique paramètre RECT ce qui rend impossible certaines manip :-/


---------------
Une nouvelle vie vous attend sur les mondes colonisés.
Reply

Marsh Posté le 05-04-2002 à 14:39:20   

Reply

Marsh Posté le 05-04-2002 à 15:08:06    

ID3DXFont c'est pas genial
pour afficher du texte en 2D.
(c'est fait pour avoir des fontes 3D)
 
Regarde plutot sur les exemples du SDK
il y a une classe exemple CD3DFont qui affiche
du texte 2D en 3D.
Ceci dit ils laissent le gros du boulot
(formatage du texte) au programmeur.
 
A+
LEGREG

Reply

Marsh Posté le 05-04-2002 à 15:41:03    

Mmh je pensait l'inverse.
La classe CD3DFont du framework me semblait appropriée pour la 3D avec rendu sur textures et autres spécifités D3D.
Et en plus je crois qu'il n'est pas possible de clipper du tout avec CD3DFont :(


---------------
Une nouvelle vie vous attend sur les mondes colonisés.
Reply

Marsh Posté le 05-04-2002 à 16:14:56    

D3DXfont est plus complete mais plutot lente  
(donc peu utilisable pour afficher
du texte 2D qui doit rester une operation simple).
 
Sinon qu'appelles-tu centrer sur d'autres coordonnees?
 
LEGREG

 

[jfdsdjhfuetppo]--Message édité par legreg--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 05-04-2002 à 16:41:27    

Comme un petit schéma est plus clair qu'une explication confuse ;)
Ici le tete est centré par rapport à A et B mais doit être clippé par rapport à A et C.
Sans Clipping:
    A|   TEXTE   |B
    A|     |C      |
      |     |       |
      |     |       |
 
Avec Clipping:
    A|   TE       |B
    A|     |C      |
      |     |       |
      |     |       |

 

[jfdsdjhfuetppo]--Message édité par Deckards--[/jfdsdjhfuetppo]


---------------
Une nouvelle vie vous attend sur les mondes colonisés.
Reply

Marsh Posté le 05-04-2002 à 16:47:39    

ah oui c'est pervers :(
 
Desole pas d'info la dessus
(a part de faire ton formatage toi-meme
mais c'est une non-solution, je te l'accorde)
 
LEGREG

Reply

Marsh Posté le 05-04-2002 à 17:04:41    

Je sais qu'il est possible d'associer une fonte au Backbuffer, d'obtenir son DC et ainsi d'appeller GetTextMetrics... mais lourd très lourd :(


---------------
Une nouvelle vie vous attend sur les mondes colonisés.
Reply

Marsh Posté le 05-04-2002 à 23:58:17    

Monte petit post ^^


---------------
Une nouvelle vie vous attend sur les mondes colonisés.
Reply

Marsh Posté le 06-04-2002 à 00:15:14    

tu peux appeler DrawText() avec DT_CALCRECT pour obtenir la taille de ton texte dans un RECT, rectSize.  
 
pour afficher ton texte centré, tu rappelles DrawText() avec dans le rect  
 
// centrage
rect.left = xA + (xB - xA - rectSize.right)/2;  
// clip droit
rect.right = xC

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed