[DirectX] ID3DXFOnt et anti-aliasing

Le côté programmation du développement d'un jeu vidéo.

ID3DXFOnt et anti-aliasing

Messagepar MMoi » 25 Juil 2007, 04:10

Salut a tous,

je cherche actuellement a gerer le rendering du texte dans une application c++ utilisant Direct 3d (9.0c), de facon a ce que tout ceci soit joliment anti-aliase.

Niveau programmation, on s'en sort a peu pres... en utilisant le sample D3DXFont_intro fourni avec le directX SDK, on trouve son bonheur.

Mais le soucis que je rencontre semble etre plus d'un ordre optique que graphique. je m'explique : l'affichage avec anti-aliasing de texte noir sur fond blanc a un rendu bien moins beau que l'affichange de texte blanc sur fond noir.

Et comme quelques images valent mieux qu'un long discours, voici les exemples (tires du sample en modifiant 3 lignes de codes) :


Blanc sur noir :
ligne 261 : 0xFF000000, // fond d'ecran noir
ligne 284 : 0xFFFFFFFF, // texte blanc

Image
ligne 211 : ANTIALIASED_QUALITY, // font avec anti-aliasing
Image
ligne 211 : NONANTIALIASED_QUALITY, // font sans anti-aliasing

Tout semble aller pour le mieux. Le texte anti-aliase semble certes un poil plus large que le texte normal, mais il est clairement agreable a lire et bien adouci.


Noir sur blanc :
ligne 261 : 0xFFFFFFFF, // fond d'ecran blanc (teste aussi avec 00 en alpha)
ligne 284 : 0xFF000000, // texte noir

Image
ligne 211 : ANTIALIASED_QUALITY, // font avec anti-aliasing
Image
ligne 211 : NONANTIALIASED_QUALITY, // font sans anti-aliasing

La, rien ne va plus ! Le texte noir sur fond blanc, une fois anti-aliase, parait plus large sans pour autant gagner en clarte. Les bordures sont toujours aussi nettes (ou presque), on passe donc d'un resultat "escalier" a un "gros pate de pixel".

Et donc...

... comment faire ?

mon avis sur le probleme est qu'il s'agit d'un effet d'optique. J'ai en effet trouve un article en anglais sur le theme (impossible de remettre la dessus, c'etait il y a un petit moment), comme quoi un noir reduit a 50% de son intensite sur fond blanc apparaissait comme noir, tandis qu'un blanc reduit a 50% de son intensite sur fond noir paraissait justement gris, d'ou le soucis de liaison dans le cas du noir sur blanc.

Voila donc le probleme. J'imagine qu'il existe une solution, car je ne suis certainement pas le seul a avoir tente d'afficher du texte dans un programme ;) ... mais pas moyen de trouver l'info que je cherche sur le net :( .

Je m'en remet a vos bons conseils pour tenter de trouver un echappatoire, et enfin afficher correctement ce texte noir sur fond blanc...
Avatar de l’utilisateur
MMoi
Hello World, I'm new !
 
Messages: 81
Inscription: 30 Oct 2006, 15:56

Messagepar RaphAstro » 09 Aoû 2007, 15:07

Utilise une police plus fine :00000025:

Autre solution utilise une texture avec les caractères dessus et affiche les sur les polygones.
Là tu maîtrise ton image.
RaphAstro
Hello World, I'm new !
 
Messages: 31
Inscription: 12 Sep 2005, 21:23

Messagepar NewbiZ » 09 Aoû 2007, 15:21

Tu pourrais essayer de fonctionner en 2 passes :
- Pour de jolis bords: tu affiches le texte noir sur fond blanc antialiasé, le tout avec une transparence de 50%.
- Ensuite pour remplir l'intérieur, tu affiches par dessus le même texte noir sur fond blanc, mais en aliasé.
Celà devrait faire de beaux bords grace à la transparence de 50% de l'antialias, et l'intérieur des lettres serait effectivement noir grace au texte non aliasé plaqué dessus. (normalement ca devrait justement laisser les bordures intactes).

C'est juste une piste, aucune idée de si ca va marcher...

Sinon, comme ca a été dit plus haut, il me semble que D3DXFont utilise le GDI, ce qui le rend assez lent.
J'ai lu ca dans un article de Loulou il me semble.
~ Passer pour un idiot aux yeux d'un imbécile est une volupté de fin gourmet ~
Avatar de l’utilisateur
NewbiZ
 
Messages: 1265
Inscription: 02 Juin 2005, 22:25
Localisation: Tallinn / Estonie

Messagepar MMoi » 14 Nov 2007, 11:40

Ha tiens, pour info et pour conclure (quoique) ce topic, la solution choisie a finalement ete de simplement appliquer l'antialiasing sur la font.

C'est moche (voir l'exemple donne), mais le chef est persuade que c'est pas mal, et tout le monde semble content. Ne gachons donc pas ce beau moment de satisfaction generale... au suivant ! :00000025:
Avatar de l’utilisateur
MMoi
Hello World, I'm new !
 
Messages: 81
Inscription: 30 Oct 2006, 15:56


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 9 invités

cron