問題タブ [slimdx]

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.

0 投票する
1 に答える
2208 参照

c# - SlimDX Direct3D 11 の定数バッファーにパラメーターを渡す

これは、SlimDX を使用した定数バッファの設定に関連しています。

非常にシンプルで、次のようなシェーダーがあります。

定数バッファーを介して渡された色を、描画されるすべてのピクセルに適用するだけで、非常に簡単です。

私のコードでは、定数バッファーを次のように定義しています。

そして、私のレンダーループでそれをここに設定します。

context は device.ImmediateContext で、 device は Direct3D デバイスです。ただし、実行すると、白を通過したにもかかわらず、ピクセルが黒として描画されるため、明らかに値が設定されていません。

誰にもアイデアはありますか?

0 投票する
1 に答える
3000 参照

c# - Direct3D 11 WorldViewProjection マトリックス変換が機能しない

Direct3D 11 と SlimDX を使用して、次の座標で 3D 空間に描画している単純な正方形があります (レンダリングされることはわかっています)。

ビューマトリックスにマトリックス変換を適用してカメラの動きを処理するカメラ クラスがあります。たとえば、Camera.MoveForward(float x) は、カメラを x だけ前方に移動します。また、View 行列と Projection 行列も保持します。次のコードを使用してそれらをインスタンス化します。

ワールド マトリックスは単位マトリックスに設定されます。

私のシェーダー コードでは、次のコードを使用して座標を変換します。

WorldViewProjection が次を使用して私のコードで設定されている場所:

カメラ クラスの変換が正常に機能する MDX アプリケーション用に記述した古いコードであるため、機能していることはわかっていますが、これを実行すると正方形が表示され、前後に移動すると問題なく動作しますが、左右に移動すると正方形が回転するように見えます移動する代わりに Y (上) 軸を中心に、上下に移動すると同様の効果があり、代わりに X (水平) 軸を中心に回転します。

参考までに、カメラの動きは次のように機能します。

0 投票する
1 に答える
2514 参照

c# - SlimDX 定数バッファーの作成により無効なパラメーターの例外が発生する

定数バッファーをインスタンス化し、ピクセル シェーダーにバインドする次のコードがあります。ConstantBuffers.EveryFrame は、フレームごとに更新する必要があるすべてのデータを保持する ConstantBuffers クラスの構造体です (現在は単一の Color3 オブジェクトのみ)。

everyFrame は、定数バッファーとして使用する Direct3D11 Buffer オブジェクトです。コンテキストは私の D3DDevice.ImmediateContext です

このコードを実行すると、次のエラーが発生します。

ただし、この次のコードを実行すると (上記のコードの前に数回呼び出すだけ)、問題なく動作します。このコードは、上記のコードが使用する変数のいずれにも触れず、ほとんどが別のクラスで動作します (デバイスはクラスのコンストラクターを介して渡され、constantBuffer はクラスの変数に格納された Direct3D11 バッファーです)。

参考までに、ConstantBuffer 構造体は次のとおりです。

0 投票する
1 に答える
1277 参照

c# - SlimDXRaw入力キーボードの「ジャダリング」を停止します

テキストエディタでキーを押したままにすると、文字が表示され、文字のストリームが表示される前に少し休止します。これは、キーを他の人より長く押し続けたり、思考を一時停止したりする人を補うシステムです。

私の問題は、SlimDXDirect3D11アプリケーションで移動キーを押したときにこれが発生することです。カメラを動かす代わりに、1ユニット移動し、一時停止してから、滑らかに移動します。

次のコードを使用して、キーボードデータをキャプチャします。

私はマウスをキャプチャするために同様のシステムを使用していますが、マウスの動きはスムーズかつ応答性が高いため、問題はキーボードがダブルタップを防ぐために行っているこの自動修正にあるはずです。ハードウェアがそれを行うのを止める方法を知っている人はいますか?または、DirectX 11で入力を別の方法でトラップすることになっている場合はどうなりますか?

0 投票する
1 に答える
1894 参照

directx - どのディスプレイがどのアダプターに属しているかを調べますか?

複数のディスプレイで動作するSlimDXアプリに取り組んでいます。アプリは選択されたディスプレイを占有し、その選択はコマンドラインを介してintとして入力されます。次にSystem.Windows.Forms.Screen.AllScreens[selection]、境界について調べ、そのディスプレイにアプリを「フルスクリーン」で表示するために使用します。

ここで、パフォーマンスを最適化するために、Direct3Dのデバイスを初期化するGPUアダプターを選択する必要があります。選択したディスプレイに電力を供給しているGPUアダプターを確認するにはどうすればよいですか?

各GPUアダプターには1つから2つのディスプレイが接続されている可能性があるため、ディスプレイ番号を使用できません。

Direct3D10を利用しています。Direct3D9のソリューションは気にしません。

最悪の場合は、ユーザーがコマンドラインからディスプレイとアダプターを選択できるようにすることですが、私はばかげた証明方法を好みます。

ありがとう

0 投票する
1 に答える
380 参照

directx - 最初のメッシュの後に深度情報がありません

Direct3D10アプリにSlimDXを使用しています。アプリでは、2つ以上のメッシュをロードし、画像をテクスチャとしてロードし、シェーダーにfxコードを使用しました。コードはSlimDXのサンプル「SimpleModel10」から変更されました

ドローコール、シェーダーセットアップコードを、1メッシュ、シェーダー(エフェクト)、ドローコールを管理するクラスに移動します。次に、このクラスの2つのコピーを初期化してから、draw関数を次々に呼び出します。

メッシュのZ位置をどのように変更しても、後で描画される出力は常に一番上に残ります。後で、PIXを使用して描画呼び出しをデバッグすると、最初のメッシュには奥行きがありますが、2番目のメッシュには奥行きがないことがわかりました。私は3つのメッシュで試しましたが、2番目と3番目のメッシュにも奥行きがありません。面白いのは、同じドローコールを使用して、同じクラスからすべてがインスタンス化されることです。

何がそのような問題を引き起こした可能性がありますか?

以下は、クラスの描画関数のコードの一部です。いくつかのクラスが長いため、残りは省略しました。サンプルの既存のOnRenderBegin()とOnRenderEnd()を保持します。

編集:多くのデバッグとコードの分離の後、私は犯人がFont.Draw()私のDrawString()関数にあることを知りました

Font.Drawをコメントアウトして問題を解決します。たぶんそれは自動的にいくつかの状態を設定し、次のメッシュ描画が深さを破棄する原因になります。SlimDXのソースコードを今調べています。

0 投票する
2 に答える
594 参照

c# - C#からC ++/CLIコンストラクターを呼び出すときにエラーが発生しました

次のスニペットを介してSlimDXのStateBlockを使用して、状態を保存および復元しようとしています。

StateBlockMaskとStateBlockはどちらもクラスです。これにより、コンパイルエラーが発生します。

SOに関する他のいくつかの投稿を読むと、これは間違った引数でマネージコードを呼び出すことに関係している問題のようです。SlimDXのソースで、私は見つけます:

私はC++/ CLIの経験がまったくないので、ここに何か問題があるのではないかと思います(欠落や余分な^など)、または自分の側に障害を集中させる必要がありますか?

(注:この質問はgamedev.netにクロスポストされています。同じ質問を持つ将来のユーザーも、そこで与えられた回答を確認することをお勧めします)

0 投票する
3 に答える
5358 参照

c# - SlimDX および WPF (DirectX 11)

SlimDX (DirectX 11) を使用して、イメージの内容を WPF でレンダリングしたいと考えています。

問題は、SwapChain を D3DImage にリンクする方法が見つからないことです。(DirectX 11 の例では、SlimDX RenderForm を使用しています。)

0 投票する
2 に答える
285 参照

c# - APIにとらわれないVector3、Matrixなど?

ゲームロジックをAPIに依存しないようにしようとしています。そうすることで、Unity3DのVector3構造体やXNAなどを使用したくありません。これを行うための最良の方法は何ですか?独自のVector3構造体をロールして、さまざまなAPI実装への暗黙的なコンバーターを作成した場合、キャストが非常に重くなるようです。

この種のベストプラクティスはありますか?MicrosoftやUnityなどにピクニックをして共通のインターフェースを守るように頼むことができるわけではありません。

0 投票する
1 に答える
917 参照

wpf - WPF D3DImage がフロント バッファーを失う

VS.Net 10 と SlimDX を使用して、D3DImage で 3D コンテンツをレンダリングするコードを書いています。32 ビット Windows XP で完全に動作します。ただし、64 ビット Windows 7 (クアッド コアおよび 4 GB RAM) に移行すると、同じコードが機能しなくなります。症状は、約 10 回または 20 回レンダリングした後、D3DImage の IsFrontBufferAvailableChanged イベントが発生し、IsFrontBufferAvailable のプロパティの値が false になることです。

RenderCapability.Tier の呼び出し、SetBackBuffer の呼び出し、フロント バッファーが失われた後のデバイスのチェック (実際には DeviceEx タイプ)、ビデオ カード ドライバーの更新 (nvidia 9500 GT 1G RAM) など、考えられるすべてのことをチェックしました。 なしそれらの仕事。

この問題の原因の 1 つは、D3DImage をソースとして使用するイメージ コントロールが GUI スレッドで作成されていないことです。アプリケーションの応答性を高めるために、GUI スレッドの作業負荷を軽減するために行っています。もちろん、スレッド化の問題を回避するために Dispatcher.Invoke を使用しています。繰り返しますが、XP では完全に動作します。

どんな助けでも大歓迎です。前もって感謝します。