問題タブ [direct3d]
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.
c++ - ビデオを DirectX で表示する
XAudio2 と Direct3D9/10 を使用してアプリケーションでビデオ (サウンド付き!) を表示するための最良/最も簡単な方法は何ですか?
少なくとも、潜在的に大きなビデオをストリーミングできる必要があり、ウィンドウのアスペクト比がビデオとは異なる可能性があるという事実に注意する必要があります (たとえば、レター ボックスを追加するなど)。 3D シーン。
もちろん、各フレームをテクスチャにロードし、一度レンダリングしたテクスチャを破棄/再利用し、XAudio2 を介してオーディオを個別に再生する方法を考え出すこともできますが、少なくとも 1 つの形式のローダーを作成するだけでなく、対処する必要もあります。ビデオとオーディオのコンポーネントを同期させるようなものがあるので、うまくいけば、より簡単な解決策が利用可能になるか、適切なライセンス (バイナリ形式での商用配布、LGPL の場合は動的リンクで問題ありません) を備えた既製の無料の解決策さえあることを願っています)。
c++ - direct3d アプリケーションでフォーマットされたテキストをレンダリングする
書式設定されたテキスト (色、さまざまなフォント サイズ、下線、太字など) をレンダリングする必要がありますが、その方法がわかりません。D3DXFont では、単一のフォント/サイズ/太さ/色/その他のテキストのみを一度にレンダリングできます。ID3DXFont::DrawText への複数の呼び出しを「組み合わせて」そのようなことを行う実用的な方法はわかりません...
周りを見回したところ、これらのことを行う既存のライブラリはないようですが、そのようなテキストレンダラーを実装する方法がわかりません。また、そのようなテキストレンダラーがどのように機能するかについてのドキュメントも見つかりませんでした.単純な固定幅の ASCII ビットマップ フォントのみをレンダリングすることは、おそらくまったく異なるアプローチであり、Unicode が重要でないテキストの単純なブロックをレンダリングする場合にのみ適しています。
これを実行できる direct3d フォント レンダーがない場合、他のレンダラー (たとえば、通常のウィンドウでリッチ テキストをレンダリングするために使用するもの) はありますか?それらを RAM 内のテクスチャにレンダリングし、それをビデオ カードにアップロードしてレンダリングします。バックバッファは妥当なパフォーマンスをもたらしますか?
3d - .x ファイルにシェーダー情報を埋め込む方法
Blender を使用して作成されたモデル ファイルを .x ファイルからインポートする、directx9 を使用する小さなグラフィック プログラムを作成しています。ここまでは順調ですね。
モデルにはテクスチャを持つマテリアルがあり、テクスチャ名を取得してオブジェクトを適切にレンダリングするのは簡単ですが、一部のマテリアルで異なるエフェクト (シェーダー) ファイルを使用したいのですが、情報を埋め込む方法が見つかりません。 .x ファイルのモデルで使用するシェーダーについて。
私が持っていた最良のアイデアは、d3d9 アプリケーションでテクスチャ ファイル名を確認し、テクスチャ名のルックアップ テーブルをエフェクト ファイルにハードコーディングすることでした。しかし、それはエレガントに見えません。また、異なるシェーダーで同じテクスチャを使用できるようにするためだけに、テクスチャをコピーして名前を変更することになることも意味します。
これを行うためのより簡単な方法が欠けているに違いないと感じていますが、何か提案はありますか?
c++ - Direct3D9 D3DFMT_A8 テクスチャのレンダリング
D3DFMT_A8 フォーマットを使用したテクスチャがあります。色が白 (つまり、RGB コンポーネントはすべて 255) であるかのようにこれをレンダリングし、テクスチャ データをアルファ ブレンディングに使用したいと考えています。
可能であれば、ピクセル シェーダーを作成せずにこれを実行したいと考えています (既存のシェーダーを変更せずに使用したり、固定関数パイプラインを使用したりするため)。
アルファ ブレンディング ビットを他のテクスチャと同じように機能させることができますが、RGB コンポーネントはすべて黒として扱われますが、白として扱う必要があります...
direct3d - Direct3D テクスチャを更新する最良の方法
CPU で生成された画像を Direct3D 9 でレンダリングする必要がありますが、テクスチャ データをグラフィックス カードに取得する最善の方法がわかりません。多くの方法があるようです。
私の使用パスは、フレームごとに次の行に沿って進みます
- テクスチャを使ってたくさんのものをレンダリングする
- テクスチャのいくつかの部分を更新します (以前のレンダリングで使用された可能性があります)。
- テクスチャでさらにいくつかのものをレンダリングする
- テクスチャの別の部分を更新する
- 等々
これを行うにはいくつかの方法を考えましたが、どれを使用すればよいかわかりません。各方法のベンチマークを検討しましたが、取得した結果が一般的なハードウェアを表しているのか、それとも自分のハードウェアのみを表しているのかを知る方法はありません.
- このタスクのテクスチャに最適なプールは?
- このテクスチャを更新する最良の方法は何ですか?
- 更新する必要があるリージョンごとに LockRect と UnlockRect を呼び出します
- テクスチャ全体に対して LockRect と UnlockRect を呼び出す
- D3DLOCK_DISCARD を使用してテクスチャ全体の LockRect と UnlockRect を呼び出し、RAM からビットマップにコピーします。
- 「更新」する必要があるたびに、まったく新しいテクスチャを作成する
- 1、2、または 3 を使用して D3DPOOL_SYSMEM のサーフェスを更新してから、UpdateSurface を使用してこのサーフェスからテクスチャのレベル 0 を更新します
- 5 と同じですが、RECT を指定して必要な領域全体をカバーします
- 5 と同じですが、更新した地域ごとに 1 つずつ、複数の呼び出しを行います
- おそらく私がまだ考えていないこれを行う別の方法...
更新する領域は通常、テクスチャ全体のサイズに比べてかなり小さいことに注意してください。たとえば、テクスチャが 1024*1024 で、5 つほどの 64*64 領域を更新したい場合があります。
directx - フルスクリーン Direct3D アプリケーションの検出
Direct3D API を使用して、フルスクリーン モードで実行されている Direct3D アプリケーションを検出する方法はありますか?
このようなアプリケーションを示すことができるSHQueryUserNotificationStateは、 Vista 以降でのみサポートされます。また、Explorer シェルが実行されている場合にのみ機能します。
c++ - 縦横比 - どのように扱うのですか? (D3D ビューポート設定)
わかりました - 私の質問は私の頭と同じくらい曇っていたようです。もう一度試してみましょう。
D3D デバイスのビューポートを構成する際に 3 つのプロパティがあります。 - デバイスが実行されている解像度 (フルスクリーン)。- モニターの物理的な縦横比 (分数と浮動小数点数: 1、例: 4:3 & 1.33)。- ソースの解像度の縦横比 (ソースの解像度自体は意味がなく、レンダリングが必要とする縦横比と実行するのに理想的な解像度の種類以外はほとんどわかりません)。
次に、これに遭遇します:
g_displayAspectRatio が xRes/yRes の比率 (= デバイスの解像度から適応) に等しい限り、すべて問題なく、このコードは期待どおりに動作します。しかし、これらの 2 つの値が関連しなくなるとすぐに (たとえば、誰かが 16:10 の画面で 4:3 の解像度をハードウェア ストレッチで実行すると)、補正するために別の手順が必要になります。 .
(そしてps私はアトミック型でCスタイルのキャストを使用し、それと一緒に暮らします:-))
directx - SlimDX (DirectX10) - テクスチャでテクセルを変更するには?
既に読み込まれているテクスチャのテクセルを変更しようとしています。
Texture2D::Map と UnMap 関数を使用することを想定していましたが、指定された DataRectangle のデータを変更しても変化はありません。
両側から黒から白へのグラデーションで 128x128 のテクスチャを作成するような簡単な例が必要です。
どうも
ps: Direct3D 10 C++ の例も役立つ場合があります。SlimDX は単なるラッパーであり、ほぼ同じ機能を備えています。
wpf - WPF ウィンドウのサイズ変更 - プレビューなし / ラバー バンドを表示
サイズ変更時に WPF ウィンドウに強制的にラバー バンドを使用させる方法はありますか (サイズ変更中のコンテンツのライブ プレビューはありません)。
これは通常、Windows のユーザー設定ですが、私のアプリケーションは D3D ウィンドウを使用しており、サイズ変更時に大きなちらつきが発生します (特に左上隅から外側へ)。
--
私は SlimDX 経由で DX10 を使用していることに言及する必要がありました。DX10 で D3DImage を使用する方法が見つかりません。これは可能ですか?
compiler-construction - HLSLコンパイラエラー?
それは私のピクセルシェーダーの一部です。コンパイラエラーがあるのはなぜですか?私はそれをコンパイルps_3_0.
せずmul()
にコンパイルしています。