問題タブ [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.
c# - SlimDX および WPF (DirectX 11)
SlimDX (DirectX 11) を使用して、イメージの内容を WPF でレンダリングしたいと考えています。
問題は、SwapChain を D3DImage にリンクする方法が見つからないことです。(DirectX 11 の例では、SlimDX RenderForm を使用しています。)
directx-11 - D3DX11CreateShaderResourceViewFromMemoryがテクスチャの部分的なコピーのみをアップロードするのはなぜですか?
D3DX11CreateShaderResourceViewFromMemoryヘルパー関数に問題があります。
ファイルまたはZIPからテクスチャを読み取り、生のバイトと長さをヘルパー関数に渡しますが、テクスチャの一部のみがアップロードされます(PIXで確認済み)。私は手動で長さをいじってみましたが、役に立ちませんでした。ファイルからテクスチャをロードするコードは次のとおりです。
これは、この問題をデバッグするために使用しているサンプルコードにすぎず、ファイルの読み込みとD3DXヘルパー関数に絞り込みました。代わりにこれを行うと:
それは完全にうまく機能します。
テクスチャを完全にアップロードしない理由について何か考えはありますか?
c++ - DirectInput8Createが失敗します:E_INVALIDARG
Direct3D 11でDirectInputを使用しており、x64用にコンパイルすると、次の行からE_INVALIDARGが取得されます。
何が起こっているのかを見るためにブレークポイントを設定すると、無効な引数の兆候は見られません。私のhInstanceは有効であり、_d8Inputポインターも有効であり、DIRECTINPUT_VERSIONは0x0800に設定されています。
以前、D3D9で直接入力を使用したことがありますが、まったく同じ方法で問題はありませんでした。私は何が欠けていますか?
ありがとう。
c++ - CheckMultisampleQualityLevelsをどのように使用し、マルチサンプリングを有効にしますか
私はdirectx11を学び、マルチサンプリングを設定しようとしています。何らかの理由で、インターネット上のすべてのチュートリアルはマルチサンプリングを無効にし、それを有効にする方法を決して説明しません。
最初に:私は周りを検索しましたが、使用方法の例を見つけることができませんCheckMultisampleQualityLevels
。デバイスを作成し、その関数を呼び出し、使用可能なレベルを見つけてから、そのデバイスを破棄し、必要な設定で新しいデバイスを作成する必要があるようです。これはこれを行う正しい方法ですか?それとももっと良い方法はありますか?
次に、マルチサンプリングをどのように有効にしますか?動作する方法がわからないため、andCheckMultisampleQualityLevels
にいくつかの値(4や4など)を入力してみましたが、実行中は何も表示されません(33や2などのクレイジーな値を入力するとエラーになります)。これは、スワップチェーンの説明以外の場所に設定する必要がありますか、それともシェーダーが何らかの方法で干渉しますか(基本的なライトとテクスチャシェーダーを設定しています)?DXGI_SWAP_CHAIN_DESC.SampleDesc.Count
DXGI_SWAP_CHAIN_DESC.SampleDesc.Quality
私はGTX570を持っているので、ほとんどのAA設定をサポートできることを知っています。何か助けになる場合に備えて、私はこの一連のチュートリアルに従っています:http: //rastertek.com/tutindex.html
c++ - DirectX 11でテキストをどのように描画しますか?
DirectX 10では、D3DX10が提供するフォントインターフェイスを使用できます。DirectX 11では、DirectWriteを使用することになっています。しかし、DirectWriteはDirect3Dとネイティブに通信しないように見えますか?私が見逃している基本的なものはありますか?DirectX 11で簡単なテキストをどのように描画しますか?
c++ - 良いDirectX(3D)DirectWriteチュートリアルはどこかにありますか?
directx10コードの一部をdirectx11にリファクタリングし、テキスト関数のDIRectWriteを理解しようとしています。MSDNから、彼らはすべてをこれに切り替えており、directwriteがdirect3dに含まれていると聞いています。しかし、えーと、directwriteで3Dレンダリングされたテキストを実際に表示するチュートリアルが見つかりません。誰かが例を知っていますか?
c++ - D3D11:単純なピクセル整列線を描画する方法は?
D3D11で2つの頂点の間に線を引こうとしました。D3D9とD3D11でいくつかの経験がありますが、D3D11では、ある特定のピクセルで始まり、別のピクセルで終わる線を描くのは問題のようです。
私がしたこと:
テクセル/ピクセル座標系に合うように、各頂点のピクセル座標に0.5fを追加しました(D3D9座標系とD3D11座標系の違いについてMicrosoftのページを読みました)。
f32 fOff = 0.5f; ColoredVertex newVertices [2] = {{D3DXVECTOR3(fStartX + fOff、fStartY + fOff、0)、vecColorRGB}、{D3DXVECTOR3(fEndX + fOff、fEndY + fOff、0)、vecColorRGB}};
レンダリングターゲットに合うように正射影行列を生成しました。
D3DXMatrixOrthoOffCenterLH(&MatrixOrthoProj、0.0f、(f32)uRTWidth、0.0f、(f32)uRTHeight、0.0f、1.0f); D3DXMatrixTranspose(&cbConstant.m_matOrthoProjection、&MatrixOrthoProj);
RasterizerState、BlendState、Viewport、..を設定します。
- 頂点をD3D11_PRIMITIVE_TOPOLOGY_LINELISTとして描画します
問題:ラインが1ピクセル短いようです。それは与えられたピクセル座標で始まり、完璧にフィットします。線の方向は正しいように見えますが、線を終了させたいピクセルはまだ色付けされていません。線が1ピクセルから短いように見えます...
この問題を説明するチュートリアルはありますか、それとも誰かが同じ問題を抱えていますか?私が覚えているように、D3D9ではそれほど難しくありませんでした。
さらに詳しい情報が必要な場合はお問い合わせください。
ありがとう、ステファン
編集:d3d10のラスタライズルールを見つけました(d3d11でも同じである必要があります):http: //msdn.microsoft.com/en-us/library/cc627092%28v=vs.85%29.aspx#Line_1
これが私が理解するのに役立つことを願っています...
c++ - D3D11: GDI テキストを GXDI サーフェスに描画する方法 (D2Dなし)
GDI と D3D11 を使用してテキストをテクスチャに描画する際に助けが必要です。D2D/DirectWrite を使用してみましたが、必要に応じて D3D11 ではなく D3D10 のみをサポートしています。これまで試したことはすべて失敗しました... GDI メソッドを使用してテクスチャに書き込みたいと思います。だから私はこのパラメータでテクスチャを作成しました:
次に、マイクロソフトがここで言うように、このテクスチャから通常の RenderTargetView を作成しました。
次のステップ: DXGI インターフェイスを取得します。
Render 関数では、次のようにします。
問題は、GDI 描画後もテクスチャがまだ空であることです (PIX でもテスト済み)。すべてが機能し、エラー メッセージはありません。
誰でもそれがどのように機能するかを説明できることを願っています。
ありがとう、ステファン
編集:(ドキュメントによると)でも試してみましたGetDC(FALSE,&hDc)
:同じ結果->何もありません。
multithreading - 遅延コンテキストは何もレンダリングしません
dx11 でマルチスレッド レンダリングがどのように機能するかを理解しようとしているので、スレッドなしで開始し、遅延コンテキストを 1 つだけ作成して、それを使用して三角形をレンダリングしようとしました。
コードはここにありますhttps://gist.github.com/998406 私はこのようにSlimDX MiniTriサンプルを変更しました->遅延コンテキストを作成します
次に、シェーダーをそれにバインドしてレンダリングします
次に、コマンドリストを取得して実行してみてください
私が期待しているのは2つの三角形ですが、即時のコンテキストのみをレンダリングしますが、deferredContext.ClearRenderTargetView(renderView, Color.Tomato); のような遅延コンテキストで画面をクリアすると 画面はトマト色になりましたが、まだ三角形はありません
また、この遅延コンテキスト PIX を追加すると、PIX が機能しなくなるということは、何かひどい間違いをしているということです。
render - DirectX 11SwapChain::現在の問題
私はここでかなり奇妙な問題を抱えています。私はdirectx11を使用して独自のゲームフレームワーク/エンジンを作成していますが、錐台カリングを実装しようとするまでは問題なく動作し、フレームレートの問題が非常に奇妙になりました。
問題を少し単純化したので、錐台カリングを行わなくても問題が発生します。現在、画面に250のモデルがレンダリングされており、デバッグでは70fpsです。ボタンHを押したままにすると、Application :: Renderでモデルのレンダリングがスキップされるように作成しましたが、これを行ってからもう一度ボタンを離すと、フレームレートはほとんどの場合40を超えます。約4fpsでも。プロファイリングは、それがSwapChain :: Presentであり、突然のすべての時間が、これまでよりもはるかに長い時間がかかることを示しています。
リリースでも同じ問題があります。これは、デバッガーを接続した場合にのみ発生します。私はこれを自分で本当に理解することはできません。
再構築と再起動を試みました。
私の現在の機能:
私のアプリケーション::レンダリング機能:
これは、Hを押してレンダリングするモデルを停止する前のプロファイリングの外観です。
Hを1秒間押してから放した後、モデルが再びレンダリングされるようにします。
また、Hを押したときにモデルをレンダリングしない代わりに、Cを押したときに同じ効果を持つ新しいモデルを作成してみました。したがって、実行時にレンダリングされるモデルの数が何らかの形で変化すると、フレームレートが狂ってしまいます。
私がフラップを実行している場合、これは起こりません(あなたがそれを見ることができるように振る舞いをキャプチャするつもりでした)。それが何かの手がかりなら、Duno。
修繕!以下のコメントを見てください