問題タブ [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++ - グラフィックプロファイリング
約 10fps に低下するアプリケーションを入手しました。xperf でプロファイリングしたところ、アプリが CPU の 20% しか使用していないことが示されました。どのメソッドも、その 20% を予想以上に使用していませんでした。
これは、fps が大幅に低下したのは、グラフィック カードがフレームのレンダリングに追いつけず、追いつく間にプログラムが停止したためであることを示しているようです...
フレーム レートの向上を試みることができるように、グラフィック カードの動作をプロファイリングし、プログラムが速度を落とすように指示していることを特定する方法はありますか?
c# - MVVM 3D エディター アプリケーションの構築 -> マウスの位置を取得しますか?
私の 3D エディター アプリケーションでは、シーンのエンティティ (メッシュ、ライト、カメラなど) をクリックして移動できるようにしたいと考えています。そのためには、Direct3d ビューに対する現在のマウスの位置を取得し、何らかの方法で ViewModel に渡す必要があると思います。私のアプリがMVVMパターンで構築されていることを考えると、どうすればそれを行うことができますか?
追加情報: Direct3d レンダラーは C++ DLL からのものであり、HwndHost を使用して WPF アプリ内に配置しています。そこでマウスメッセージを処理するために使用できると思うWndProcがありますが、可能であれば避けたいと思います。
ありがとう!
c++ - Direct3D9 で独立したレンダリング レイヤーを実装する方法は?
データの上に複数のオーバーレイを表示する必要があるウィンドウ化された Direct3D データ プロット アプリケーションに取り組んでいます (ゲームの HUD に似ています)。プロットが必要なデータが大量にある可能性があり、すべてのオーバーレイが毎回変更されるわけではないため、表示内のオーバーレイが 1 つだけ変更されたときに頂点を再プロットするのは得策ではないと考えました。
これにより、オーバーレイのテクスチャと頂点を透明な背景を持つ複数のテクスチャにレンダリングし、レンダリング ループでオーバーレイして個別に更新できる (Photoshop のレイヤーと同様) というアイデアに至りました。
このプログラムの大部分を、サーフェスではなくテクスチャにレンダリングするように変更することに着手する前に、テクスチャを使用することが最善のアプローチかどうか疑問に思っていました。
direct3d - StretchRectはDF24またはINTZサーフェスで使用できますか?DF24またはINTZをマルチサンプリングできますか?
DF24から別のDF24(ATI固有)にStretchRectできますか?
INTZから別のINTZ(nVidia固有)にStretchRectできますか?
マルチサンプルサーフェスとしてDF24またはINTZを作成できますか?
graphics - OpenGL ES または Direct3D のサーフェスとは正確には何ですか?
描画面の概念の適切な定義が見つかりませんでした。サーフェスに関連付けられているプロパティは何ですか? 純粋な OpenGL のコンテキストでは、OpenGL にはウィンドウ システム固有の概念がないため、表面はありません。ただし、OpenGL ES には、適切に定義せずに描画面の概念を導入する EGL API があります。描画面の簡潔な定義は何ですか?
c++ - C++ D3DX フォントと変換 (d3d9 および d3d10 ソリューションが必要)
現在の変換と同様の設定、特に投影変換とビューポートを考慮した方法でフォントをレンダリングしたいと考えています。
そのための最善の方法は、テキストをレンダリングするオフスクリーン サーフェスを用意し、そのサーフェスを本当にテキストが必要な場所にレンダリングすることだと考えています。
ただし、このソリューションの多くの側面については確信が持てません。
これは、それを行うための最良の方法ですか?
はるかに優れた無料のフォントレンダラーがあり、そのようなことを可能にするために時間を費やす方がよいでしょうか. さまざまな理由で d3dx フォント インターフェイスについて不満を言う人がたくさんいますが、より優れた Unicode 対応レンダラーへのリンクはありません...?
特定のサーフェス形式および/またはサーフェス サイズを使用する利点はありますか (たとえば、標準的な大きなものではなく、可能な限り最小のものを常に使用すると、サイズを計算するための追加の手順が必要になります...)
.net - 動的データプロットをレンダリングするためのGDIよりも高速なソリューションを探しています
C ++ / CLIを使用して単純なGDIベースのデータプロッターを作成しましたが、特に高速ではありません(一部の基本的なプロファイリングでは、画面へのレンダリングが問題であることが示されています)。
UserControlのハードウェアアクセラレーションを有効にする方法はありますか、それともdirect3Dの.netインターフェイスはありますか?...または私が検討できる他のオプションがいくつかあります。
マネージコードを使用しているため、ソリューションは可能な限りCLIと互換性がある必要があります。
[編集]それが役立つ場合は、それぞれ2x2ピクセルの長方形のストリップ(128データポイント)を使用してレンダリングしていますGraphics::FillRectangle
-おそらくそれを行うためのより良い方法がありますか?
directx - D3D9でのアンチエイリアシング/マルチサンプリング
私はD3D9で3Dモデリングアプリケーションを作成しており、可能な限り広く互換性を持たせたいと考えています。これは、ハードウェアに依存する機能、つまりマルチサンプリングをほとんど使用しないことを意味します。ただし、リアルタイムレンダリングは完璧である必要はありませんが、見栄えの良い画面キャプチャを提供する必要があります。マルチサンプリングを行わないと、エイリアシングが発生し、見栄えが悪くなります。
画面キャプチャを作成するには、メモリ内に一時的なサーフェスを作成し、シーンを1回レンダリングしてから、ファイルに保存します。アンチエイリアスキャプチャを実現する方法について最初に考えたのは、オフスクリーンのステンシルサーフェスをマルチサンプルとして作成することでしたが、デバイス自体がD3DMULTISAMPLE_NONEで初期化されていたため、もちろんDXではそれができませんでした。
まず、スクリーンキャプチャを作成する方法のサンプルを次に示します。すでにレンダリングされたフレームのバックバッファを保存する方が簡単なことはわかっていますが、実際のレンダリングウィンドウとは異なるサイズの画像を保存する機能が必要です。そのため、この方法で保存します。エラーチェック、状態を復元するためのコード、およびリソースの解放は、簡潔にするためにここでは省略されています。m_d3ddevは私のLPDIRECT3DDEVICE9です。
CreateDepthStencilSurface()の呼び出しを見ることができます。これは、pp.MultiSampleTypeをieD3DMULTISAMPLE_4_SAMPLES
に置き換えることができると期待していた場所ですが、機能しませんでした。
私の次の考えは、(ビデオカードに関係なく)D3DDEVTYPE_REF
常にサポートする、まったく異なるLPDIRECT3DDEVICE9を作成することでした。D3DMULTISAMPLE_4_SAMPLES
ただし、すべてのリソース(メッシュ、テクスチャ)がHALデバイスであるm_d3ddevにロードされているため、REFデバイスでシーンをレンダリングするためにそれらを使用することはできませんでした。Direct3d9ex(Vista)ではデバイス間でリソースを共有できますが、私はXPで作業していることに注意してください。非常に多くのリソースがあるため、この1つのフレームをレンダリングするためにすべてをリロードしてからアンロードすることは、私のアプリケーションにとって時間効率が悪すぎます。
キャプチャ後に画像をアンチエイリアスするための他のオプション(つまり、3x3ブラーフィルター)を調べましたが、それらはすべてかなりひどい結果を生成したので、可能であれば、D3Dからアンチエイリアスされたシーンを取得してみてください。
どんな知恵や指針も大歓迎です...
ありがとう!
com - ID3DX10Mesh と ID3DXMesh のガイドはまったく同じ
私は Direct3D との C# 相互運用を行っています (SlimDX と XNA については知っているので、これのメリットには触れません)。ID3DX10Mesh インターフェイスを渡して D3DX10CreateMesh を呼び出しています。「そのようなインターフェイスはサポートされていません (HRESULT からの例外: 0x80004002 (E_NOINTERFACE))」というエラーが表示されます。D3DX10CreateMesh 呼び出しは、10 メッシュを作成して 9 メッシュをコピーしようとしているときに発生します (x ファイルを正常にロードした後)。ID3DX10Mesh の C# 定義を調べたところ、定義した他のすべての作業インターフェイスと同じ構造に従っています。
しかし、その後、あることに気がつきました。9 メッシュと 10 メッシュの Guid はまったく同じです (4020E5C2-1403-4929-883F-E2E849FAC195)。d3dx9mesh ヘッダーと d3dx10mesh ヘッダーを再確認しましたが、これが当てはまります。9 メッシュ インターフェイスは機能しますが、10 は機能しません (これはインスタンス化の順序に依存する可能性があります)。これは、C/C++ アプリでも 2 つのメッシュを一緒に使用できないことを意味するため、個人的には理解できませんが、あなたができること。私はそれが NVUT SDK で行われているのを見てきました。Runtime Callable Wrapper が Guid によって混乱しているとしか思えませんか?
メッシュ GUID が同じなのはなぜですか? C/C++ アプリはどのようにして競合を回避できますか?