問題タブ [direct3d9]
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++ - Direct3D9シャドウマッピングブレンドモード
現在、direct3d 9でシーンに影を描画しようとしています。マルチパスレンダリングを実行しようとしていますが、ブレンドモードの使用/設定方法を理解するのに問題があります。
デプスバッファを埋めるデプスパスを実行した後、シーン内のすべてのライトをループするループが作成されました。そのループ内に2つのループがあり、どちらもシーン内のすべてのシェイプをループします
私はこの種の設定をしています
pixでは、各ライトをループしていることがわかりますが、実行すると、ライト配列の最後のライトのみが表示されます。ブレンドモードと関係があると思います。
ブレンドモードを調べて、ソースブレンドとデスティネーションブレンドに関する情報を見つけました。これは私が必要としているものですか/誰かがそれを説明するのを手伝ってもらえますか?
前もって感謝します、
マーク
[編集]次のコードを使用して両方のライトを表示しました
影は正しく見えませんが、目的の結果に近づいています。
これ以上のアドバイスは素晴らしいでしょう、
ありがとう、
マーク
direct3d - D3D9アプリは正確なD3DXDLLバージョンに関連付けられていますか?
D3DXに対してアプリをビルドした場合June2007_d3dx9_34で、ターゲットシステムに新しいバージョンのNov2007_d3dx9_36がある場合、それは問題になりますか?
MSのredist-installerツールを使用してD3DXDLLを配布しましたが、1台の「クリーンな」PC(以前にD3DXがインストールされていません)に気づきました。D3DXDLLが見つからないというエラーが発生しました。インストーラー自体が機能していないかどうかを判断する前に、DLLの新バージョンを提供することが問題であるかどうか疑問に思いました。アプリは、正確な名前のDLLを探しますか?
c++ - D3D では、プロセスを終了する前に release を呼び出す必要がありますか?
私が direct3d のために取っているチュートリアルには、次のように書かれています。
「... 基本的に、Direct3D を作成しても閉じない場合、プログラム自体が閉じられた後でも、次の再起動までコンピューターのバックグラウンドで実行され続けるだけです。悪い。特に悪いこれら 2 つのインターフェイスを解放すると、すべてがオフフックになり、Windows がメモリを取り戻すことができます。」(リンク)
このチュートリアルが言っていること、プロセスを終了した後もリソースがまだぶら下がっているとは本当に信じていません...
プログラムがクラッシュしたり、デバッグ中に停止を押したりした場合のように、リソースはまだぶらぶらしていますか? また、directx を使用する他のゲームでは、プロセスを強制終了して閉じることがよくあります。
プロセスを終了し、device->Release を呼び出さない場合、リソースはオペレーティング システムに解放されますか?
c++ - 2Dタイルベースのゲーム、カメラでズームインするとタイルスプライト間のギャップが表示されますか?
D3DXSPRITEメソッドを使用してマップタイルを画面に描画しています。上矢印を押したままにするとズームインするズーム機能を追加しましたが、タイル間のギャップが表示されるようになりました。これがいくつかのスクリーンショットです。
タイルあたりの通常サイズ(32x32)
ズームイン(タイル間に白い隙間が見える)
ズームアウト(最悪でも!)
これが、私が翻訳して世界をスケーリングするコードスニペットです。
そして、これは私の地図の描画です(タイルはタイルのベクトルのベクトルにあります..そして私はまだカリングをしていません)
mesh - そのdrawmesh操作はどのピクセルに描画しましたか?
わかりました。これは比較的単純な問題です。画面空間のどこに特定のメッシュが描画されたかを知りたいのですが。次に、その情報をある種のデータストアに保存して、画面スペースで何かを操作するときに、レジスターを検索してオブジェクトを見つけることができるようにする予定です。つまり、画面に描かれた宇宙船をクリックして、ターゲットを選択します。等
メッシュが描画されたピクセルを見つける方法が見つかりません...
または、私がやりたいことが何であるかについて明らかな何かが欠けている場合は、私に知らせてください!
directx - (DirectX9) 暗黙的に適用されるガンマ補正
アップデート:
皆様、ご回答誠にありがとうございました。Jesse Hall が示唆したように、ドライバー (またはハードウェア) の問題のようです。他の構成で同じアプリを試したところ、期待どおりに機能しました。
同じ GPU (ATI 4800 HD) を共有しているがドライバーのバージョンが異なる他のコンピューターでアプリをテストしたところ、それらはすべて同じ誤った動作を示しました (書き込み時の二重ガンマ補正のようです)。これらのコンピューターでは、D3DRS_SRGBWRITEENABLE を false に設定して表示を修正する必要がある場合。これがこのハードウェアの既知のバグかどうかは誰にもわかりませんか?
さらに奇妙なのは、これら 2 つの構成で同じ最終結果が得られることです。
- D3DRS_SRGBWRITEENABLE = FALSE および D3DSAMP_SRGBTEXTURE を TRUE に設定
- D3DRS_SRGBWRITEENABLE = FALSE および D3DSAMP_SRGBTEXTURE を FALSE に設定
ピクセル デバッガーでは、ケース 1 で線形化が適切に適用されていることがわかりますが、(自動) 書き込み時の修正により、ケース 2 と同じ出力が得られます (変換はまったく実行されません)...
// -- 更新の終わり
DirectX9 アプリケーションのガンマ補正を修正するのに問題があります。
サンプラー (D3DSAMP_SRGBTEXTURE) でテクスチャの線形化を有効にし、出力用の sRGB 書き込み (D3DRS_SRGBWRITEENABLE) を有効にすると、ガンマ補正が 2 回適用されているように見えます。
これが私のセットアップです。次のテクスチャ (ここから) を使用して、フルスクリーンのクワッドを描画しました。
結果は、写真の右側で視覚的に明るすぎました。PIX を使用してこれらの灰色のピクセルの 1 つをデバッグしました。すべてが適切に設定されていれば、出力値は 0.73 (=0.5^(1.0/2.2)) になると予想していました。残念ながら、ピクセル シェーダーの出力は 0.871 でした (ガンマ補正が 2 回適用されたように見えますか?)。デバッガーを使用してピクセル シェーダーに足を踏み入れたところ、テクスチャ フェッチで (0.491, 0.491, 0.491) の値が返されました。これは、読み取り時の線形化が正しく機能していることを意味します。
D3DRS_SRGBWRITEENABLE を無効にすると、ピクセル シェーダーの出力は 0.729 になり、より正確に見えます。
この変換はどこから来たのですか (デバッガーでは、ピクセル シェーダーの出力は 0.491 でした)。他にどのようなフラグ/レンダリング ステートを確認する必要がありますか?
ご助力ありがとうございます!
c++ - スクリーンショットを撮る C++ directx が黒い画像を取得する
directxでスクリーンキャプチャをしようとしています。方法を説明しているいくつかのページからコードを試しましたが、常に黒いスクリーンショットが表示されます。誰かが私を助けることができれば、私は感謝します.
私のコードは次のとおりです。
c++ - D3D ディスプレイ アダプター ID からのわかりやすいモニター名
質問が示唆するように、ディスプレイアダプター名と一致するように説明的なモニター名を取得しようとしています。以下のコードは、\.\DISPLAY1 のようなデバイス ID を提供します。これは理解できますが、探しているものではありません。
その実際の名前をどこから取得するかについてドキュメントを調べましたが、今まで見つけることができませんでした。ときどき私は少しばかになることがあります (場合によっては目が見えないこともあります) ので、昼休みにもう一度試してみますが、誰かが私を正しい方向に向けることができるでしょうか? どうもありがとう。
(実際の名前とは、グラフィック構成パネルに表示されるものを意味します)
c++ - IDirect3DDevice9vtableを変更するID3DXFont::DrawText
Direct3Dをいじっています-デバイスオブジェクトのvtableエントリを変更して、提供された関数の代わりに関数が呼び出されるようにします。これはほとんど機能しているにもかかわらず、ある時点で何かがIDirect3DDevice9
vtableを復元することに気づきました。たとえばID3DXFont::DrawText
、最初の呼び出しです。下の人はそれに触れないでください。
なぜこれが起こるのですか?
direct3d - 「WaitForVBlank」を使用して Direct3d9 で VSYNC 割り込みを取得する方法
私は Direct3D9 の初心者で、いくつかのことを試しています。「IDirect3DDevice9Ex」デバイスで「WaitForVSync」を使用したいと考えています。ただし、それを使用して VSYNC 割り込みを取得する方法がわかりません。MSDN やコード スニペットに関するヘルプはあまり見つかりませんでした。どんな助けでも大歓迎です。
ありがとう、モッツ