2012-04-09 15 views
1

Allein die Verwendung von ID3DXFont::DrawText() erzeugt gezackte Schriftarten, besonders bei größeren Schriftgrößen. Gibt es eine Möglichkeit, DirectX9 zum rigorosen Rendern von Zeichensätzen wie in der Windows 8 Metro UI zu verwenden?Wie renderst du super glatte Schriften mit DirectX9?

Ich versuche DirectWrite zu vermeiden, weil es Direct2D erfordert, aber ich verwende DirectX9.

+0

klingt wie Sie für Anti-Aliasing oder Cleartype suchen. –

+0

@ MдΓΓБДLL Ich habe die 'CLEARTYPE_QUALITY' und' ANTIALIASED_QUALITY' Flags ausprobiert. Sie produzieren immer noch gezackte Schriftarten, und ich skaliere sie nicht. – Joshua

+0

@Joshua: Bitte Screenshot und Rendering-Code-Fragment zur Verfügung stellen. – SigTerm

Antwort

1

DirectWrite benötigt Direct2D nicht und kann auch eigenständig verwendet werden (IDWriteBitmapRenderTarget). Es ist viel einfacher, Direct2D zu verwenden, um DirectWrite-Text in eine IWICBitmap zu rendern (via ID2D1Factory :: CreateWicBitmapRenderTarget()), und dann diese Bitmap mit DX zu zeichnen (vielleicht durch Kopieren auf eine DX-Oberfläche oder mit einem Shared-Surface-Ansatz; bin mit den Einzelheiten hier nicht vertraut. Sie können eine IWICBitmap über IWICImagingFactory :: CreateBitmap() erstellen.

Metro scheint ClearType nicht zu verwenden, daher sollte Graustufen in Ordnung sein. Korrekter ClearType-Text würde tatsächlich Alphakomponenten pro Komponente erfordern und funktioniert daher im Allgemeinen nicht als Bitmap mit einem Alphakanal.

Verwenden Sie DX9, so dass Sie auf XP laufen können, oder verwenden Sie es aus einem anderen Grund? Wenn Sie Win7 oder Vista SP2 + Platform Update als Minimum benötigen, dann empfehle ich Ihnen, D2D + DW zu verwenden, um Text in eine Bitmap zu rendern und dann DX zum Zeichnen der Bitmap zu verwenden.

0

Sie könnten eine Bitmap-Schriftart erstellen, die von "sehr einfach" bis "sehr kompliziert" reichen kann.

Für eine einfache Möglichkeit gibt es dieses Beispiel, das obwohl in Managed DirectX ist, kann problemlos in C++/DirectX 9 getan werden. Bitmap Fonts. Mit dieser kostenlosen App Bitmap Font Generator können Sie auch ganz einfach Bitmap-Schriften erstellen (hier finden Sie auch Links zum Erstellen von Bitmap-Renderings).

Dann gibt es komplexere Möglichkeiten, um Schriftarten zu tun, z. B. mit signed distanced fields wie unter Improved Alpha-Tested Magnification for Vector Textures beschrieben.

0

ID3DXFont ist nicht in der Lage, wirklich coole und glatte Schriften zu zeichnen. Um dies zu erreichen, rende ich meinen eigenen Texturatlas für die Schriftart und zeichne ihn dann mit Quads mit Texturen. Der zweite Weg besteht darin, die Schriftart aus dem Atlas auf ähnliche Weise zu zeichnen, jedoch unter Verwendung der Distanzfeldmethode. Entfernung Feld mit einfachen Pixel-Shader wird Ihnen sehr glatte und skalierbare Schriftarten zur Verfügung stellen.

An diesem Punkt erreichte ich dies: my distance field font