問題タブ [directx-11]
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.
visual-c++ - DirectX 11 オブジェクトを地形に追加する - Rastertek チュートリアル
私は Rastertek DX11 テレイン チュートリアルを「チュートリアル 6: 高さベースの動き」まで読み進め、作成、コンパイルなどを行い、チュートリアル自体は正常に機能しています。
各チュートリアルの最後に、次に何をすべきかを提案します。
「四分木からの情報に基づいて高さを調整しながら地形をランダムに移動するオブジェクトを配置します。」これを適切に行う方法がわかりません。
私がこれを行う方法について誰か提案がありますか? アイテムと地形を追加する方法を説明するチュートリアルへのリンク (サイトで見つけることができませんでした) か、正しい方向に向けてください! そこにあるコードを確認する必要があるかもしれません (ここにあります: http://rastertek.com/tertut06.zip )。今のところ、ファイルから 3D イメージをレンダリングできるようになるのが最も近いのですが、そうすると地形が消えてしまいます。だから私は明らかに間違った木を吠えています。私は周りにグーグルを持っていましたが、それは役に立ちませんでした。
私はまだこれらすべてに非常に慣れていないので、どんな提案も素晴らしいでしょう。
c++ - DirectX 11 D3DXMatrixTranslation は引き続き実行されますか?
オブジェクトの移動をボタンの押下にバインドしたい。ボタンを押すと、オブジェクトはすぐに消え、最初の Translation が常に実行されているかのように見えます。その後、ボタンを離すとすぐに消えて、ボタンに触れていなかったはずの場所に行き着きます。ボタンを押したり離したりすると、2 つの間で「バウンス」します。
私はまだ DX11 に本当に慣れていないので、よく見てきました。何が起こっているのかを理解しようとして、ここで髪を引っ張っています。
c++ - IASetInputLayoutは、すでに設定されている入力レイアウトを渡すかどうかを確認しますか?
DirectX 11でゲームエンジンを設計していますが、ID3D11DeviceContext::IASetInputLayout関数について質問がありました。ドキュメントで私が見つけることができることから、以前に設定されたデバイスに入力レイアウトを設定した場合に関数が何をするかについての言及はありません。コンテキストでは、私が次のことを行う場合:
これにより、デバイスの状態の切り替えによってパフォーマンスが低下しますか、それともランタイムは入力レイアウトをすでに設定されているものと同等であると認識して戻りますか?
c++ - DX11ゲーム中にD3D10SDKLayers.dllが読み込まれるのはなぜですか?
以下の編集アップデートを参照してください。元の質問が変更されました!
DX11デバイスを使用する作業ウィンドウがあります。Alt + Enterを使用して全画面表示にしようとすると、問題が発生します。ウィンドウがフォーカスされていない場合、次のようなデバッグ出力が表示されます。
'MyGame.exe': Loaded 'C:\Windows\SysWOW64\D3D10SDKLayers.DLL', Cannot find or open the PDB file
そして警告
DXGI Warning: IDXGISwapChain::Present: Fullscreen presentation inefficiencies incurred due to application not using IDXGISwapChain::ResizeBuffers appropriately, specifying a DXGI_MODE_DESC not available in IDXGIOutput::GetDisplayModeList, or not using DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH
DX11ゲームは、特に実行の途中でD3D10SDKLayers.dllをロードしてはならないことをかなり確信しています。MSDNのドキュメントから、このdllはデバイスの作成時に読み込まれることがわかりまし if a device is created with the appropriate layer flag, this DLL is loaded automatically
た。そこで、実行中にデバイス作成メソッドが何らかの形で呼び出されているかどうかを確認しましたが、呼び出されていません。ゲーム内にデバイス作成が存在するスポットは2つしかなく、どちらのスポットもヒットしていません。編集:MSDNを確認した後、このdllはデバッグdllにすぎず、他の目的なしに、警告自体を出力するためにロードされる可能性があります。
明示的な複製の場合:
1)Alt + Enterを6回(フルスクリーン遷移サイクル3回、両方向、ウィンドウの開始)、7日にdllがロードされ、警告がポップアップ表示されます。これは、ウィンドウのフォーカスに関係なく発生します。
メソッド呼び出し階層の要約(全画面表示):
1)ToggleFullscreen()-私のメソッド、Alt + Enterによって呼び出される唯一のメソッド
2)ResizeTargetAndBuffers()-私のメソッド、以下のサブメソッド
3)DXGISwapChain-> ResizeTarget(frontBufferDesc)はフロントバッファーを指定された解像度にサイズ変更します
4)DXGISwapChain-> GetFullscreenState ()フルスクリーン状態を判別する
5)DXGISwapChain-> SetFullscreenState(TRUE、NULL)フルスクリーンにする
6)ResizeDXGIBuffers(width、height、TRUE)myメソッド、サイズ変更バックバッファー、サブメソッド
7)DXGISwapChain-> ResizeBuffers(count、幅、高さ、フォーマット、フラグ)バックバッファのサイズを変更する
8)DXGISwapChain-> ResizeTarget(frontBufferDesc)は、リフレッシュレートの問題を防ぎます。MSDNのベストプラクティスに従って、RefreshRateメンバーがゼロになりました。
9)DXGISwapChain-> GetFullscreenState()を使用して、フルスクリーン状態を判別します
メソッド呼び出し階層の要約(ウィンドウ化される):
1)ToggleFullscreen()-私のメソッド、Alt + Enterによって呼び出される唯一のメソッド
2)ResizeTargetAndBuffers()-私のメソッド、以下のサブメソッド
3)DXGISwapChain-> ResizeTarget(backBufferDesc)はフロントバッファーを指定された解像度にサイズ変更します
4)DXGISwapChain-> GetFullscreenState ()フルスクリーン状態を判別する
5)DXGISwapChain-> SetFullscreenState(FALSE、NULL)フルスクリーンに移行
6)DXGISwapChain-> ResizeTarget(backBufferDesc)フロントバッファーのサイズをウィンドウの解像度に変更(一部の解像度の問題の解決に役立ちます)
7)ResizeDXGIBuffers(width、height 、FALSE)私のメソッド、バックバッファーのサイズ変更、以下のサブメソッド
8)DXGISwapChain-> ResetBuffers(count、width、height、format、flags)でバックバッファーのサイズを変更
9)DXGISwapChain-> GetFullscreenState()でフルスクリーン状態を判別
これの影響は非常に深刻です。Alt + Enterをキャッチする低レベルのキーボードフックは呼び出されなくなったため、Windowsは自動Alt + Enter処理を実行できます。これにより、ToggleFullscreenメソッドが完全にバイパスされ、ウィンドウがデスクトップ解像度に設定されます。これにより、バッファのサイズが間違ってしまい(設定しなかったため、ウィンドウが設定しました)、非効率的な警告が発生し、バッファサイズとウィンドウがフルスクリーンであるかどうかについての正しい知識がなくなったプログラムの変数をいじりますか否か。
これを引き起こしている可能性があるものについてのアイデアはありますか?
PSコードサンプルが必要な場合は、見たいものを具体的に示してください。可能であれば、それを提示しようと思います。コードリスト全体を掲載することはできません。
編集:デバイス作成コードは以下のとおりです。
最初の呼び出しは99%の確率で成功します。つまり、リモートデスクトップを使用していない場合なので、ここではそれにのみ焦点を当てます。アダプター、driverTypeをD3D_DRIVER_TYPE_HARDWARE、m_CreateFlagsをD3D11_CREATE_DEVICE_DEBUG、m_eFeatureLevelをD3D_FEATURE_LEVEL_11_0として指定します。かなり標準的な呼び出しであり、常に成功します。
更新の編集1:いくつかの広範なデバッグの後、dllがロードされ、非効率性の警告が表示されると、いくつかの非常に興味深い状況が発生することがわかりました。それらは以下にリストされています:
1)VS2010デバッガーは、キーフックでブレークポイントをトリガーしなくなりました。
2)印刷出力がキーフックで機能しなくなりました。
3)ウィンドウが以前にサイズ変更可能だった場合、ウィンドウのサイズ変更
ができなくなる可能性があります。4)ウィンドウが移動できなくなる可能性があります。
5)3つのスレッドが終了します。
編集更新2:最初の編集更新には誤った仮定がある可能性があります。見つかった場合は削除します。低レベルのキーフックが呼び出されなくなったことが判明しました(ブレークポイントやprintステートメントが内部で機能しないため)。したがって、プログラム内の何かが誤って登録を解除すると、上記のすべての問題が発生します。 。これを明日テストしています...
更新の編集3:もう何が起こっているのかわかりません。自宅のコンピューターと職場のコンピューターで同じクリーンなプロジェクトをテストしたところ、異なる結果が得られました。自宅では、問題が発生することなくAlt + Enterを無期限に実行できますが、職場ではAlt + Enterを7回実行すると、キーフックが呼び出されなくなり、バッファの問題が発生します。
更新の編集4:より多くのテスト(作業中)。キーフックは、ウィンドウモードへの3回目の移行後に確実に削除されています。キーフックメソッド内に出力されなくなり、どのキーが押されたかに関係なく、ブレークポイントはトリガーされません。上記で説明した他のすべての問題は、このキーフックがToggleFullscreen()を呼び出さなかった結果であるため、これに関して別の質問を開くつもりです。参考までに、以下にキーフックコードを示します。
printfステートメントは、6番目のAlt+Enterの直後までキーフックが呼び出されていることを示しています。これは、ウィンドウモードへの3回目の移行です。問題を引き起こすために、私が以前に思ったように、4回目のフルスクリーンに行く必要はありません。MyClassVarによって呼び出されるすべてのメソッドは、Windowsキーフックにタイムアウトがあることを知っているので、キーフックをできるだけ速く実行するためにインラインになっています。Alt + Enterの実際の処理は、MyClassのスレッドによって処理されます。
また、誰かがこれをコミュニティwikiではなくすることはできますか?この質問は、ウィキとして使用するにはあまりにも具体的すぎると思います。それが1つになった唯一の理由は、私が定期的に編集して更新していることです。
windows - ClipCursorが機能していません
DX11ゲームに取り組んでおり、フルスクリーンモード中にカーソルをフルスクリーンウィンドウにクリップしたいと思います。私はこの方法を使用します
ただし、2台のモニターでフルスクリーンモードになっている場合でも、マウスを他のモニターに移動できます。フルスクリーンモードで解像度を2048x1152に設定すると、ウィンドウの長方形が1360x768になり、それがクリップされます。GetClippedRectを使用してクリップされていることを確認します。
だから私は2つの質問があります:
1)ウィンドウが表示されているモニターにマウスがクリップされないのはなぜですか?
2)モニターが2048x1152であり、解像度が2048x1152に設定されていることがわかっているのに、ウィンドウの長方形が1360x768と測定されるのはなぜですか?
c# - SlimDX /DirectX11でビュー/ワールドマトリックスを設定するにはどうすればよいですか?
以前のXNAプロジェクトから持ち込んだシンプルなFPSカメラをSlimDX.Direct3D11に実装しようとしています。結果のビューマトリックス、またはその問題のマトリックスを設定する方法がわかりません。
私が見つけたすべてのチュートリアルは、SlimDXでは利用できないC++と関数またはクラスを使用しています。SlimDXホームページの3つよりも多くの例を知っている人はいますか?
これは私の頂点シェーダーです
そしてそれらをロードする
directx - MinGW で DirectX 11 アプリをコンパイルする方法
調べたところ、 MinGW で Direct3d 10 または 11 を使用することに関連する資料が見つかりません。物事を機能させるにはどうすればよいですか? DX SDK が提供するヘッダー ファイルでエラーが発生します。
また、Visual Studio を提案することなど考えもしないでください。
c++ - 低レベルの Windows キー フックが機能しなくなるのはなぜですか?
これは私の最初の質問の続き です。DX11 ゲーム中に D3D10SDKLayers.dll が読み込まれるのはなぜですか? 私は DX11 ゲームを作成しており、低レベルの Windows キー フックを使用して Alt+Enter をキャプチャしているため、必然的に問題が発生する Windows に自動的に行わせるのではなく、独自の方法を使用してフルスクリーンを切り替えることができます。このプロセスの説明と詳細は、リンクされた質問で入手できます。私の問題は、なんらかの理由で 6 回目の Alt+Enter の後、キーフックが一貫して機能しなくなることです。私は自分で登録を解除していません。
キーフックのコードは次のとおりです。
さらに情報が必要な場合は、必要なものを教えてください。なぜこれが起こっているのかわからないので、どのような情報を提供する必要があるのか わかりません. 私の知る限り、キーフックを明示的に登録解除する以外にキーフックを取り除く唯一の方法は、Windows がタイムアウトした場合です。すべての MyClassVar メソッドはインラインで可能な限り高速になり、Alt+Enter は別のスレッドから処理されます。
directx - カメラの異常な動作、DX11
私は、directx11 を使用してプログラムを作成しており、ビュー マトリックスを操作する基本的なカメラ クラスを作成しました。プログラムをテストすると、シーンは動かないという結果になりましたが、カメラを動かすと、任意の場所で見えるものを切り取る効果があります。私が何を意味するかを示すために、いくつかの写真を添付しました。
今のところ、ピクセル シェーダーは赤のピクセルのみを出力するようにしています。
私の頂点シェーダーは、SDK の例に基づいています。
cbuffer cbChangeOnResize : register(b1)
{
matrix Projection;
};
この問題について数日間頭を悩ませてきましたが、何が原因なのか、どのコードが関連しているのかさえわかりません。PIX は、ワールド、ビュー、およびプロジェクション マトリックスが存在し、適用されているように見えますが、何かが正しくないことは明らかです。
ありがとうございました。
c++ - マウスの動きをカメラのパンに変換するにはどうすればよいですか
DirectX3D 11を使用してアプリケーションを作成し、カメラのターゲットベクトルは変数xdelta、ydelta、およびzdeltaによって決定されます。
RMBとLMBを押したままマウスを画面上で動かすときに、ビューをXYでパンする必要があります。
マウスの動きのデルタをVIEWスペースに追加して、ワールドXとYではなく、ビューに対してXとYでパンするようにする必要があると考えました。
ただし、これは初めてのことで、VIEW座標をWORLD座標に戻す方法がわかりません。
すべてのフォーマットルールを正確に覚えるのに十分なほどここに投稿していないので、すべてのフォーマットルールに従っていることを願っています。
どんな助けでもいただければ幸いです。以下は私のコードスニペットです。おそらくもっと良い方法もあります。
私は別のアプローチを試していますが、それは正しいアプローチであると信じていますが、それでも正しく機能していないようです。マウスを動かすと、画面からXとYのデルタが取得され、変数「xdelta」と「ydelta」に格納されます。
次に、変換行列を作成します
次に、マトリックスに値を入力します
対応するビュー座標を取得するには、mViewと呼ばれるビューマトリックスを掛ける必要があると思います。
次に、これらの変換された値を現在のターゲットXおよびYに追加します。これは、変数「target_x」および「target_y」によって決定されます。これにより、ビュー座標XおよびYに対して(つまり、現在のビューに直交する)ターゲットベクトルが移動します。
しかし、そうではありません。ビューのX軸とY軸ではなく、ワールドのX軸とY軸に沿ってターゲットを移動します。
その他のスニペット
私はD3DXMatrixLookAtLH関数を使用していますが、マウスの動きに基づいてターゲット位置の変化を計算し、新しいターゲットをその関数にフィードさせようとしています。いくつかのコードスニペットを追加しました:
まず第一に、あなたのすべての情報に感謝します。DirectXマトリックスをゆっくりと理解するのに役立ちます。以下のロジックで正しいですか?画面上でマウスの変更がXで5.0、Yで5.0であると仮定します。それが私のデルタです。Zは常に0.0になります。ビュー座標は次のようになります。
これで、XYデルタのビュー座標をmTempビューマトリックスに保存する必要がありますか?
もしそうなら、XYデルタビュー座標をmView XY座標に追加し、次にワールド座標に変換して、実際のXYワールド値を取得することにより、続行するための最良の方法は、ターゲットを設定する必要がありますか?
私はこれをどのように達成するかについて途方に暮れています。それは私には本当にそれほど明確ではありません、そして私が主題に関して購入したすべての本もまた明確ではありません。