問題タブ [directwrite]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
direct3d - DirectWriteからDirect3D11にレンダリングする最短パス?
DirectX 7を学んでから、人は大きく変わりました。
どこを見ても(ウィキペディアを除く)、何かをする前にDWriteからD2DまたはGDIにレンダリングする必要があると書かれています。
そのウィキペディアの記事は間違っていますか?Direct3Dにレンダリングできませんか?
どうやら、D2DをD3Dに書き込むには、D3D10.1デバイスも開く必要があるため、D2Dにレンダリングする必要はありません。
D3D11でテキストをレンダリングするだけで、本当にこれらすべてが必要ですか?
fonts - IE9 / Firefox 4+ (DirectWrite) の行の高さが古い GDI ブラウザと一致しない
これは解決するのが難しい問題です。
DirectWrite と GDI を使用してフォントをレンダリングするブラウザー間で行の高さが異なると、サイトのデザインに悪影響を及ぼします。これにより、IE9 および FF4+ で背景画像の位置がずれます (他の問題の中でも特に)。
簡単な例を次に示します。
すでに CSS をリセットしたと仮定しましょう。コード:
これは次のようにレンダリングされます。
ご覧のとおり、IE9 (および firefox 4+) のテキストは、古い GDI ブラウザーよりも 1px 短くなっています。これは、私のサイトのレイアウト全体で重大な問題を引き起こします。特に、私のサイトのまったく同じページから取得した 2 つのスクリーンショットから示されているように、背景画像 (アイコンなど) をインライン要素に配置する場合 (明確にするために 3 ピクセルごとに行を追加し、線を引いています)テキストの最初の行まで):
最終的な結果として、アイコンは IE9 で 1 ピクセルおよび 2 ピクセル低く表示されます。考えられる解決策の 1 つは、2px の padding-top を追加して、テキストを下に押し下げて、アイコンとインラインのままにすることです。ハックで完全な混乱は別として (CSS で firefox 4+ を選択できますか?) 必要なパディングは要素ごとに異なり (私の場合は 1 ~ 3 ピクセル)、それ自体が問題を引き起こします。
何が起こっている?場合によっては DirectWrite がフォントを小さくできることは理解していますが、ブラウザー メーカーが行の高さを以前のものから変更したのはなぜですか? 確かに、これは多くのサイトに影響を与えています。
どんな助けでも大歓迎です。
乾杯、レオ
c++ - 透過的なGDI+DCでのDirectWriteテキストレンダリング
ネイティブC++で記述されたGDI+コードの重要な既存の本体があります。これには、テキストとビットマップが描画される透明なレイヤーが含まれています。レイヤー(独自のGDI +グラフィックスを備えたメモリDCを使用して実装)は、画面に表示される前に結合されます。
GDI +ではテキストの単一の実行で複数のブラシの色を使用できないため、テキスト要素にそれほど満足していません。したがって、異なる色を別々のテキストの実行として隣り合わせに描画する必要があります。隣接するラン間のカーニングなどは、異なる色の連続した単一のランであるかのように同じではないため、別々のテキストランを連結するのは厄介です。
追いかけっこをして、DirectWriteが提供するものを探求するのは良い考えのように思えたので、DirectWriteの既存の機能のいくつかを複製しようとしています。最も具体的には、テキストを透明なビットマップにレンダリングします。
これが困難な点です。アンチエイリアシングがうまくいかずに、DirectWriteテキストをアルファを含む背景でレンダリングすることはできません(前景のテキストピクセルは透明にフェードする必要があるため、代わりに黒にフェードします)。私のテキストはこの投稿の例のように見えます。
これに関するMSのドキュメントと例は少し薄いです、そしてグーグル/スタックオーバーフロー検索の量はこれまでのところ重要な光を照らしていません。
私のコードには、DirectWriteのものの次のビットが含まれています。
グレースケールのアンチエイリアスにフォールバックする必要があるようですが、苦労しています。誰かお願いします:
- グレースケールアンチエイリアシングが何をするのか、そしてそれが透明なビットマップレンダリングターゲットで機能するかどうかを説明します。と
- グレースケールアンチエイリアスを機能させる方法についてのヒントを教えてください。
c# - DWriteを使用してテキスト範囲を測定する方法は?
DirectWrite でテキスト範囲を取得するにはどうすればよいですか? たとえば、 .Net はFormattedText クラス
の一部として提供します。
gdi - DirectWrite で文字間隔を調整する
DirectWrite を使用しています。全体的な文字間隔を調整するにはどうすればよいですか? GDIでSetTextCharacterExtraに相当するものが必要だと思います。
windows - DirectWrite、Windows API、またはスプライトフォント以外のものを使用してXNAでテキストをレンダリングする
私は任意の画面解像度(またはウィンドウサイズ)で動作するXNAゲームに取り組んでおり、グラフィックの縮小と拡大は問題なく機能しますが、SpriteFontsのスケーリングはひどいように見えます(SpriteFont自体はすでに悪いように見えることは言うまでもありません)使用される圧縮の)。サイズは何でもかまいませんので、サイズごとにSpriteFontを作成することは問題外です。
DirectWriteまたはWindowsAPIでさえ、XNAで実際のベクター(TrueTypeなど)フォントをレンダリングする方法であると聞きましたが、この例は見つかりませんでした。
これをXNAに実装するのはどれくらい難しいですか?私が見ることができる例はありますか?他に選択肢はありますか?
もちろん、私はWindows以外のプラットフォームについては心配していないので、Windowsのみのコードで問題ありません。
windows - DirectWriteを使用したテキストのズーム
DirectWrite / Direct2D APIを使用してテキストズームを実装する方法を知っている人はいますか?大きなテキストの本文をスムーズに高精度でズームイン/ズームアウトする必要がありますが、デモ/サンプルが見つかりませんでした。
ありがとう。
c++ - フォント アウトライン ベジエ スプラインの輪郭と DirectWrite
DirectX 11 バージョンと OpenGL 3.1+ バージョンで提供されるプロジェクトに DirectWrite を使用することを検討しています。
理解していることから、DirectWriteはDirect3D 10.1の上にあるDirect2Dを使用します(DirectX 11.1がリリースされるまで)。これは、現在、Direct3D 11 で DirectWrite を使用するには、1 つの Direct3D 10.1 デバイスと Direct3D 11 デバイスを作成し、これら 2 つのデバイス間でリソースを共有する必要があることを意味します。これには、同期のオーバーヘッドが伴うようです。もう 1 つの問題は、この設定ではテキストを d3d11 バックバッファーに直接レンダリングできないように見えるということですよね...?
また、実際的な意味で DirectWrite と OpenGL を組み合わせることが可能かどうかもわかりません..? 私の推測では...
すっごく... 私も独自のフォント レンダラーを作成することを検討しています。解像度に依存しないように、ベジエ スプライン アウトラインに基づいてフォントをレンダリングできるようにしたいと考えています。GetGlyphOutline() 関数については知っていますが、MSDN ライブラリによると、非推奨であり、「...新しいアプリケーションでは使用しないでください」と思われます。また、MSDN の DirectWrites リファレンス ページを見ても、GetGlyphOutline() でできるように、ベジエ スプライン情報で同じものを取得する方法がわかりません。ID2D1SimplifiedGeometrySink にラップされたアウトライン情報を取得できますが、ID2D1SimplifiedGeometrySink から純粋なベジエ曲線、コントロール ポイント、情報を取得する方法がわかりません。D2D (D3D10.1) を使用した描画にのみ使用できます。現時点ではあまり興味がありません。
非推奨のメソッド、DirectWrite などを使用してフォントのアウトラインの輪郭を取得する方法はありますか?
お分かりのように、私は DirectWrite と Direct2D のどちらにもあまり詳しくありません。どの方向に進むべきかを模索中です。DirectWrite/D2D の道をたどる価値があるのか、それとも独自のフォント レンダラーを作成するのか、またはその他の素晴らしいアイデアを作成するのか :)。助言がありますか?
PS 現在、Win7 プラットフォーム向けに開発を行っており、リリースされたら Win8 に移行する予定です。
microsoft-metro - カスタム フォントを埋め込みファイルから Metro アプリの DirectWrite に読み込むにはどうすればよいですか?
DirectWrite で使用するために埋め込みファイルからフォントをロードすることに対して、私は負け戦を戦ってきました。C#/XAML インターフェイスを備え、SurfaceImageSource を使用して DirectX コンテンツを追加する単純なパズル ゲームを作成しています。
すべての DirectX コードを処理する WinRT コンポーネントを作成しましたが、非常にうまく機能します。私の DirectX コンテンツの一部は、DirectWrite API を使用して描画されたテキストです。IDWriteFactory::GetSystemFontCollection()などを使用してシステムからインストール済みのフォントをロードしている限り、好きなテキストをすべて描画できます。ただし、埋め込みファイルからカスタム フォントをロードする方法が見つからないようです。
私が知る限り、Metro アプリは従来のアプリと同じ方法でファイルシステムからファイルをロードすることは許可されていません。したがって、通常のファイル パスを使用するIDWriteFactory::CreateFontFileReference()メソッドは、私にとっては価値がありません。ms-appx URL からファイルを読み込む必要があります。
そこで、新しいStorageFile APIを使用して ms-appx URL からフォントを読み込むIDWriteFontCollectionLoaderインターフェイスを実装するカスタム フォント ローダーを WinRT コンポーネントに作成しました (これまでに行ったことがない場合は、これは大変な作業です) 。これで、 IDWriteFontFileをロードしてIDWriteFontFaceを取得できますが、フォント フェイスで本当に便利なメソッドを呼び出そうとすると、E_UNEXPECTEDが返されます。グリフの数とグリフ インデックスを取得できますが、GetGlyphRunOutline()やGetDesignGlyphMetrics( ) などを呼び出そうとすると、 E_UNEXPECTEDで失敗します。を生成するのと同じ描画コードを使用して、GetGlyphRunOutline ()を使用した ID2D1PathGeometryは、フォント ファイルをインストールし、IDWriteFactory::GetSystemFontCollection()で始まる一連の呼び出しを通じてIDWriteFontFaceを取得する限り、うまく機能します。通常の True Type フォントを使用しています。
では、カスタム フォントを埋め込みファイルから Metro アプリの DirectWrite に読み込むにはどうすればよいでしょうか。他の人がこの方法でカスタムフォントをロードできるようにしたいと思うので、おそらく簡単なものが欠けているだけです。
私の問題を特定するのを手伝ってくれる人のために、サンプル プロジェクトがあります (または簡単に準備できます)。
2 つのIDWriteFontFaceオブジェクトを並べて読み込んで、機能するオブジェクトと機能しないオブジェクトの違いを見つけようとしました。IDWriteFontFaceインターフェイス内に隠されているため、失敗の原因を突き止めるために確認する必要があることはわかりません。助けてください!
ここにも投稿された質問: DirectX フォーラムを使用した Metro スタイル ゲームの構築
c++ - IDWriteFontFaceからIDWriteTextFormatを作成する方法
W8 C ++ / CX DirectXアプリケーションを作成していて、アプリケーション独自のストレージからカスタムフォントファイルを使用しようとしています。IDWriteFactory :: CreateFontFileReferenceを使用してディレクトリからIDWriteFontFileをロードする方法と、そこからIDWriteFontFaceを作成する方法を理解しました。
私が今知らないのは、 IDWriteTextFormatをロードするためにIDWriteFontFaceを使用する方法です。IDWriteFontCollectionを使用してこれを行う必要がありますか?
答えが本当に愚かで些細なものである場合は申し訳ありませんが、私はDirectXを初めて使用し、外出先ですべてを学びます。