2016-04-04 20 views

Antwort

5

Die allgemeine Antwort auf Fragen wie diese ist "wenn Sie fragen müssen, dann sollten Sie wahrscheinlich DirectX 11 verwenden." DirectX 12 ist eine Grafik-Experten-API, die eine immense Kontrolle bietet und sich nicht besonders mit der Benutzerfreundlichkeit für Anfänger beschäftigt. Siehe this thread für weitere Gedanken in diesem Sinne.

Damit ist eine Möglichkeit, Geräte-Interop und Direct2D/DirectWrite zu verwenden. Siehe Working with Direct3D 11, Direct3D 10 and Direct2D.

UPDATE:DirectX Tool Kit for DirectX 12 ist jetzt verfügbar. Es enthält eine SpriteFont/SpriteBatch Implementierung, die Text auf Direct3D 12 Renderzielen zeichnen wird. Siehe this tutorial.

0

Wenn Sie maximale Funktionalität mit minimalem Aufwand wünschen, sollten Sie wahrscheinlich mit DirectWrite über ein D3D11 Interop-Gerät gehen, wie Chuck in seiner Antwort sagte.

Wenn Sie Ihre eigenen High-Performance-Text-Rendering rollen möchten, können Sie einen Blick auf die text renderer in the miniengine example repository on github werfen, hat es einige interessante Ideen.

2

Pure DirectX 12, dann müssen Sie die Font-Glyph-Daten in einen Vertex-Puffer laden und mit einem Vertex-Shader und Pixel-Shader rendern. Sie haben Bibliotheken online erwähnt, dies ist Expertenwissen und glücklicherweise veröffentlicht James Stanard bei Microsoft ein How-to mit seinem quelloffenen MiniEngine-Projekt. Er verarbeitet mehrere Schriftarten, Anti-Aliasing und Schlagschatten in DirectX 12.

Finden Sie die Projektdateien auf GitHub https://github.com/Microsoft/DirectX-Graphics-Samples/tree/master/MiniEngine und Check-out Textrender.h und Textrender.cpp

0

Leider sind die einzigen Möglichkeiten sind bereits beschrieben worden. Schnittstelle mit DirectWrite oder erstellen Sie Ihr Glyph-Dateisystem.

Was Sie tun, ist eine Texturdatei mit Glyphen zu importieren, kleine Quadrate um jedes Zeichen aus der Glyphtexturdatei auszuschneiden und dann alle zusammen zu einer Zeichenfolge zu kleben. Es führt zu etwas schnellerem Zeichnen (in einigen Fällen).

Ich denke, der Ansatz zu diesem von den anderen verwiesen wird etwas veraltet und zum Scheitern verurteilt. Direct3D11 hatte den gleichen Mangel an Textzeichnungsunterstützung wie Direct3D12 (vielleicht Fehlinformation dazu). Es war Direct3D9, das über die integrierte Unterstützung für Textzeichnung verfügte, die jedoch einwandfrei funktionierte. Später wurde die Sprite-Batch-Zeichnung unterstützt, bei der Sie den gesamten Text in einem Sprite rendern konnten.

Es scheint rückwärts zu sagen, dass Sie einfach "müssen" oder "sind kein Experte", um solch ein einfaches aber langweiliges System zu implementieren. Ein solches System ist dazu bestimmt, auf die gleiche Art und Weise zu versagen, warum niemand Assembly verwenden möchte, um etwas zu codieren, das sie in C und darüber codieren können.

Die D3D11 und D3D12 Math Bibliothek leidet auch unter den gleichen Fehlern. Um Vektoren zu definieren und zu konvertieren, ist es besser, wenn Sie D3D9X mathematische oder benutzerdefinierte mathematische Strukturen verwenden, da die neueren Methoden so rückwärts laufen."Jemand" hat es geschafft und muss es mögen, aber ich erinnere mich daran, eine Beschwerde darüber zu machen, wie einfach es ist, Vektoroperationen vor oder nach zu machen, es verdoppelt oder verdreifacht die Menge an Linien, die benötigt werden, um einfache Vektoroperationen und -umrechnungen durchzuführen die Menge an Referenzen und Lernzeit, die Sie benötigen, um zu sehen, wie jemandes Lib funktioniert. Es scheint ein großer Fehler zu sein, der von Mathematikern präsentiert wird, die nie gut programmieren konnten.