問題タブ [direct3d11]
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# - WindowsストアアプリでSharpDXを使用してテクスチャを読み込む
C#ゲームをOpenTK(OpenGL)からSharpDX(DirectX)に変換し、Visual Studio 2010から起動して実行しました。また、Windows 8DeveloperPreviewのMetroのVisualStudio11からも起動して実行しています。ただし、Metroビルドにはまだテクスチャがないため、現在、ポリゴンは単純に色付けされています。問題は、イメージのロードに使用されるメソッドがMetroDLLにないことです。これらのメソッドはすべて、Windows StoreアプリのTexture2Dクラス(Resourceクラスから継承)にはありません。
これらが最終的にMetroに実装されるかどうか誰かが知っていますか?または、私が使用できる別のアプローチはありますか?これまでDirectXやSharpDXのことを知らなかったので、まだ耳の後ろでとても濡れていることを覚えておいてください。
SharpDXのヘルプや情報を見つけるのは簡単ではありません。これは、C#を使用したMetroでの3Dの優れたソリューションのように思われるためです。
memory-management - GetAvailableTextureMem は Direct3D 11 で同等
を使用して可能だったように、Direct3D で空きテクスチャ メモリの見積もりを取得する可能性を探してIDirect3DDevice9::GetAvailableTextureMem
いますが、これまでのところ何も見つかりませんでした。助言がありますか?
directx - BC5_SNORM テクスチャをサンプリングすると、値の範囲が正しくない
私は Direct3d 11 を使用していますが、奇妙なことに遭遇しました。法線マップを取得し、それを DDS ファイルに 2 回エンコードしました。1 回はR8G8B8A8_SNORMエンコーディングで、もう 1 回はBC5_SNORMで。
次に、 D3DX11GetImageInfoFromFileと組み合わせてD3DX11CreateShaderResourceViewFromFileを使用して、各テクスチャを読み込みます。ピクセル シェーダーでこれらのテクスチャをサンプリングすると、R8G8B8A8_SNORMテクスチャが [-1,1] の範囲の値を返していることがわかりました。これは、SNORM テクスチャに期待する値です。ただし、BC5_SNORMテクスチャは [0,1] の範囲の値を返しますが、これは私には意味がありません。
デバッガーと PIX でチェックしたトリプルを 2 倍にします。テクスチャの形式は正しい ( BC5_*S*NORM ) ため、符号付きの値が返されない理由がわかりません。
viewport - RSSetViewportsは、Direct3D 11で非同期または同期を呼び出しますか?
私のアプリケーションは20を超えるビューポートを処理する必要がありますが、許可されるのは16のみです。ありがたいことに、シーン全体をいくつかの部分に分割して、頂点を互いに「リーク」させないようにすることができます。各部分のビューポートは10未満です。
ここで問題となるのは、レンダリングの途中でビューポートの配列を変更するのが適切かどうかです(許可されていますが)。私の推測では、* RS * SetViewportsと呼ばれている限り、非同期であり、レンダリングの途中で安全に呼び出すことができます。しかし、私は証拠を見つけることができませんでした。
multithreading - DXGI で複数のスワップチェーンを使用するにはどうすればよいですか?
ここがややこしい。1 つのスワップ チェーンに同時にアクセスできないということですか、それとも DXGI は完全にスレッド セーフではありませんか?
1 枚のカードに 2 つのディスプレイ用の 2 つのスワップ チェーンがある場合、それらを交換する最良の方法は何ですか? 複数のスワップ チェーンでリソースがほとんど見つかりません。
c++ - DirectXMath で 2 点間の距離を取得する最良の方法は何ですか?
新しい XMVECTOR および XMFLOAT3 クラスを使用して、2 点間の距離を取得する最良の方法は何ですか? XMVector* ファミリの関数でそれを行う関数が見つからなかったため、次のように思いつきました。
これは、組み込みの最適化を使用するため、x、y、z に 3 つの float しかなく、sqrt を使用する通常の Vector3 クラスよりも高速ですか? すなわち:
c++ - SM5.0 の方法で塗りつぶされた B スプラインをレンダリングする方法は?
GPU にいくつかのアイソライン パッチを送りたい場合は、最後にいくつかの三角形プリミティブを与えます。いくつかの実用的な方法はありますか、またはどこで探すべきですか?
Direct2D は D3D9 関数を使用しているようです。CPUでテッセレーションを行う可能性があると思います。GPUのやり方はあるのかな。
directx - DirectX 11:複数のアダプターの同時使用
1台のPCから8〜12台のモニターを駆動する必要があり、すべてが1つの3Dシーングラフの異なるビューをレンダリングするため、複数のグラフィックカードを使用する必要があります。現在dx9で実行しているので、これを簡単にするためにdx11に移行することを検討しています。
初期の調査では、明らかなアプローチが機能しないことが示唆されているようです。各カードを別々のプロセスから駆動しない限り、パフォーマンスはお粗末です。Web検索は何も出てこない。dx11を使用した単一のプロセスから複数のカードを同時に利用するための最善の方法を誰かが提案できますか?
direct3d - D3D11 ectで固定関数ブレンディング操作を引き続き使用するのはなぜですか?
新しい3DAPI(D3D11など)で固定関数ブレンディングモードをまだ使用している理由を理解しようとして、私は座礁していました。D3D10では、シェーダーを使用するために、固定機能のAlphaClippingが削除されました。理由は、ほとんどすべての状況に対してはるかに強力なアプローチだからです。
では、なぜブレンド操作(現在レンダリングしているRenderTargetからのテクスチャサンプル)を計算または所有できないのでしょうか?ビデオカードパイプラインに、これを実現するのを困難にするハードウェア設計の問題がありますか?
これが役立つ理由は、屈折オブジェクトオーバーレイごとに2つのrenderTarget間を行き来する必要がないため、屈折シェーダーをより高速に実行できるようにすることができるためです。OSまたはゲームUI用の屈折ウィンドウシステムなど。
D3D12でこれを見たいので、これはディスカッションフォーラムではないので、このようなアイデアを提案するのに最適な場所はどこでしょうか。または、これはD3D11ですでに可能ですか?
c++ - Direct3Dから、レンダリングされない単純な三角形
最初はSDLを使用し、次にSFMLを使用して、しばらくの間ゲームを作成して遊んでいます。基本ができて良かったのですが、今度はもう一歩踏み込んで、グラフィックを一から作る方法を学びたいと思います。だから私はDirect3Dのロープを学ぼうとしていて、始めるためにD3D11に関するいくつかのチュートリアルを読んでいます。暗い背景に白い三角形を描いて、絶対的な基本を理解しようとしています...しかし、それを機能させることはできません。
Visual Studio2012RCとWindows8SDKを使用しているので、ここにはC ++ 11構文がいくつかあり、さらにD3DXはありません。ウィンドウを設定できましたが、Direct3Dの初期化はうまくいくようです。私が指定した色で画面をクリアするので、メインループのレンダリング部分を実行します。しかし、私の派手な白い三角形は表示されません。私は自分のコードを数回調べましたが、経験が不足しているため、コードの何が問題になっているのかわかりません。ウィンドウの初期化/d3dのシャットダウンやその他の無関係な部分を切り取りましたが、問題に関連する部分がある場合に備えて、切りすぎてしまうのではないかと心配しています。 。
必要な手順はすべて整っていると思います。デバイス、デバイスコンテキスト、スワップチェーン、およびレンダリングターゲットを作成します。次に、頂点シェーダー+入力レイアウトとピクセルシェーダーを作成します。その後、頂点バッファーを作成し、三角形の頂点を追加し、プリミティブトポロジをTRIANGLELISTに設定します。これで、初期化は完了です。メインループでは、D3Dを頂点/ピクセルシェーダーにポイントし、バッファーに挿入した3つの頂点を描画するように指示します。ただし、ClearRenderTargetViewの呼び出しからの濃い青色の背景のみが表示されます。三角形はありません。ステップを逃したり、途中で何か間違ったことをしたことがありますか?
これが私が持っているコードです(私は恥ずかしそうにこれのコード規則で少し緩んでいることを認めます、それでポインター変数の前にpはありませんなど):
メインループ:
Direct3D init:
私の頂点タイプ:
私の頂点シェーダー:
私のピクセルシェーダー: