問題タブ [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.
directx - HLSL-サンプラーの最小/マグ/ミップフィルターを設定して、すべてのフィルター/アンチエイリアシングを無効にするにはどうすればよいですか?
tex2Dサンプラーがあり、テクスチャに存在する色だけを正確に返したいです。Shader Model 3を使用しているため、loadを使用できません。
テクセルが複数の色に重なっている場合は、1つを選択して、テクセル全体をその色にします。
これを行うには、ミップマッピング、または少なくともミップのトリリニアフィルタリングを無効にしたいと思います。
私の問題は、Min / Mag / Mipフィルタリングを本当に理解していないので、これらをどの組み合わせに設定する必要があるのか、またはこれが私が求めているものであるかどうかさえわからないことです。
完全なテクスチャが球にマッピングされた後の関連領域のスクリーンショット。
アンチエイリアシング/ブレンディング/フィルタリングのアーティファクトがはっきりと表示されます。私はこれらが欲しくありません。
MSDNはこれを言っています。
D3DSAMP_MAGFILTER:タイプD3DTEXTUREFILTERTYPEの倍率フィルター
D3DSAMP_MINFILTER:タイプD3DTEXTUREFILTERTYPEの縮小フィルター。
D3DSAMP_MIPFILTER:縮小中に使用するミップマップフィルター。D3DTEXTUREFILTERTYPEを参照してください。
D3DTEXF_NONE:D3DSAMP_MIPFILTERとともに使用すると、ミップマッピングを無効にします。
hlsl組み込み関数を理解するためのもう1つの優れたリンク。
解決済み
HLSLの問題ではありません!申し訳ありません。答えられない質問がたくさんあるようです。Ogreは上記の設定を上書きしていました。これはで修正されました;
directx - IDirect3DVertexBuffer9::Lock が失敗する原因として考えられるものは何ですか?
私たちのゲームの一部のエンド ユーザーからのエラー レポートでは、次のような動作を頻繁に見てきました:IDirect3DVertexBuffer9::Lock
失敗し、返されたエラー コードはD3DERR_NOTAVAILABLE
.
これが発生すると、非常に頻繁に (常にではありませんが)、CreateTexture
orのCreateVertexBuffer
呼び出しがエラーで失敗しますD3DERR_OUTOFVIDEOMEMORY
。
頂点バッファ ロックの失敗の原因として考えられるものは何ですか? 仮想メモリのアドレス空間が使い果たされている可能性がありますか?
c++ - Intel GMA X3100 での Direct3D9 動的頂点バッファ ロックのクラッシュ/ポストロックの失敗
まず第一に、私はかなりベテランのグラフィックス プログラマーですが、よく知られているように、誰もが間違いを犯します。残念ながら、コードベースは少し大きすぎて、ここで賢明なスニペットをスローし始めることができず、分離された CPP/コードベースで状況全体を再作成するのは非常に困難です。申し訳ありませんが、時間がありません。私は説明するために最善を尽くします。
ところで、誰かが私がこれをどのように処理しているか疑問に思っている場合は、もちろん特定のコードを提供します。
D3DPOOL_DEFAULT プール内のすべてのリソースと同様に、デバイス コンテキストが取り除かれると、遅かれ早かれリソースをリセットする必要があります。私は、何年にもわたって機能してきたすべての関連リソースに対してこれを処理するメカニズムを構築しました。しかし、その事実にもかかわらず、このバグが明るみに出て以来、私はもちろん、あらゆる仮定をチェックし、主張し、疑いました。
何が起こるかは次のとおりです。正確なサイズが 18874368 バイトの、かなり大きな動的頂点バッファーがあります。このバッファーは、動的ジオメトリ (等値面関連、fyi) を生成する前に、フレームごとにロックされます (D3DLOCK_DISCARD フラグを使用して完全に破棄されます)。もちろん、リセットを開始するまで、これは正常に機能します。更新されたリソースの Lock() 操作によって返されたポインターまたは単純なクラッシュのいずれかでアクセス違反を引き起こすバグを引き起こすには、1 回、2 回、または 5 回のリセットが必要になる場合があります。同様のアドレスですが、最初のケースではそれに追加されたオフセットがありません。その場合、途中で書き込みを行っているためです-D3D9 dll Lock()呼び出しの側にあります。
これを他のハードウェアでテストし、GMA X3100 ドライバー (BootCamp を備えた MacBook を使用) を最新のものにアップグレードしましたが、他のマシンでは再現できず、何が問題なのか途方に暮れています。同様のバッファで同様の状況を再現しようとしました(クワッドで満たされた同じタイプの大きなスクラッチパッドがあります)、一定のバイト数を超えると、同様に動作し始めました。
私はここで解決策を求めているわけではありませんが、同じ敵と戦った他の開発者がここにいる場合、または洞察に満ちた方向性を教えてくれる開発者がいる場合は非常に興味があります。私が見落としているかもしれないし、見落としていないかもしれません。
ありがとうございます。修正は大歓迎です。
- ニールス
ps - 私の友人は、それがオンボード ビデオ RAM の巨大なバッファであり、動的な性質のために内部で少なくとも 2 倍または 3 倍バッファリングされているという有効な点を提起しました。一方、デバッグ出力 (D3D9 デバッグ DLL + 最大警告出力) は無音のままです。
ps 2 - より多くのマシンでテストしてもまだ動作していましたが、それはおそらく状況の問題です:巨大な動的で、内部的に 2 倍/3 倍のバッファー バッファーがあり、多くのメモリと、必要なときに文句を言わないドライバーではありません..
ps 3 - Lock と Unlock が 18MB の完全なコピーを行うことを (知っておくべきでした) 言われました - それもあまりスマートではありませんが、それでも :) IBS)。
誰かがより良い提案をしない限り。私はまだそれを聞きたいです:)
direct3d - Direct3D 9でのクリッププレーン、頂点シェーダー、およびハードウェア頂点処理
DirectX SDK(2010年2月)のサンプルで再現できるアプリケーションのクリッププレーンに問題があります。
HLSLwithoutEffectsサンプルにクリッププレーンを追加しました。
カメラを回転させると、ハードウェアとソフトウェアの頂点処理を使用したときに異なる視覚的結果が得られます。ソフトウェア頂点処理モードまたは参照デバイスを使用している場合、クリッピングプレーンは期待どおりに正常に機能します。ハードウェアモードでは、カメラと一緒に回転しているように見えます。
RenderText();の呼び出しを削除した場合。OnFrameRenderから、ハードウェアレンダリングも正常に機能します。さらにデバッグすると、問題がID3DXFont::DrawTextにあることがわかります。
この問題はWindowsVistaとWindows7で発生しますが、WindowsXPでは発生しません。異なるPC上の3つのOSすべてで最新のNVidiaおよびATIドライバーを使用してコードをテストしました。DirectXの問題ですか?またはクリッププレーンの誤った使用法?
ありがとう
イゴール
c++ - DirectX 深度バッファリングが機能しない
何らかの奇妙な理由で、深度バッファが機能していません。つまり、後で描画された三角形は、位置に関係なく常に重なっています。
これらのプレゼンターパラメーターがあります
およびこれらのレンダリング ステート:
編集:返信ありがとうございます。これはレンダリング コード コードです。
Model::Draw()
コードは次のとおりです。
wherevertexBuffer
およびindexBuffer
with のカウントは、クラスの属性です。
ここにいくつかのスクリーンショットがあります (FU、スパム保護):
1)http://img822.imageshack.us/img822/1705/dx2010080913182262.jpg
こんな状況です
2)http://img691.imageshack.us/img691/7358/dx2010080913183790.jpg
これは立方体が前面にあるときの (正しい) ビューです (立方体は後で描画されます)
3)http://img340.imageshack.us/img340/4720/dx2010080913184509.jpg
しかし、角錐台を前にすると、立方体はまだ重なっています。
自分でカメラを動かした方が見やすい…
direct3d9 - Direct3D9 はクワッド プリミティブをサポートしていますか?
Direct3D9 のヘルプを読みました(強調は私のものです):
Direct3D 9 は、点、線、三角形、およびグリッド プリミティブをサポートします。これらは、線形を超える高次補間をサポートするために拡張されました。三角形と線には空間的な広がりがありますが、これまではどちらも線形補間を使用してレンダリングされていました。Direct3D 9 では、Direct3D は、5 次までの高次の補間を使用して、これらのプリミティブ型のレンダリングをサポートします。さらに、新しいクワッド プリミティブ タイプがサポートされるようになりました。この新しいタイプは、高次補間でレンダリングすることもできます。
これにより、Direct3D9 はクワッドをサポートしていると思われD3DPT_QUADLIST
ますが、Direct3D9 のインクルード ファイルに似たものは何も見つかりません。
c++ - D3D デバイスでのスプライトの描画
テキストとスプライトを描画する C++ コードで使用されるフックされた DirectX があります。テストしたところ、2D アプリケーションにうまく描画されました。しかし、3D アプリケーション (実際には複雑なゲーム) で試してみると、テキストしか表示されませんでした。そのことから、スプライトが他の何かによって上書きされていないと推測したため、テキストも上書きされます。旗を立てました
何らかの理由でALPHABLEND
、スプライトがどのアプリケーションでもまったく表示されなくなったため、有効にせず、コメントアウトしました。
D3D 上にスプライトを描画する確実な方法はありますか? それ以外の場合、それらに異なるフラグ/値を使用する必要がありますか?
また、スプライトが実際に他のスプライト/オブジェクトの「下」にある場合に備えて、スプライトにどの z-index を設定する必要がありますか?
(私はデバイスに描画されるものの作成者ではありません。フックされた DirectX API しか持っておらず、描画するアプリケーションのコードさえ知りません)。
graphics - 強制終了したアプリケーションによって残された Direct3D リソースを解放する
Direct3D アプリケーションを使用していますが、デバッガーを使用してアプリケーションを強制的に終了する必要がある場合があります。この方法でアプリケーションを数回終了した後、新しいデバイスを作成しようとすると、Direct3D は「ビデオ メモリ不足」エラーを報告します。現在、ビデオ メモリを「リセット」するために、ディスプレイの解像度を 800x600 に切り替えてから以前の解像度に戻すことで、この問題を回避しています。99% の確率で動作します。しかし、単純なユーティリティ (コマンド ライン アプリなど) があれば、ビデオ メモリを明示的に解放してグラフィックス カードと Direct3D スタックをすばやくリセットできると便利です。
強制終了した Direct3D アプリケーションによって残されたビデオ メモリやその他のリソースを解放するにはどうすればよいですか?
directx - D3DウィンドウアプリでVSYNCを有効にする方法は?
したがって、ウィンドウ化されたアプリケーションでD3Dを使用しています。
次のパラメータを使用してD3Dを初期化しました。
OnPaintが呼び出されるたびに、画像をバックバッファーにレンダリングして前面に表示します。
私の知る限り(そしてMSDNもそう言っています)、一度設定D3DPRESENT_INTERVAL_ONE
すると、vsyncは機能します。
ただし、この場合、水平方向にドラッグすると画像が破れます。
(画像全体に線があるようです。線の下の画像がモニターに表示され、上の部分が続きます。)
一部のサイトでは、D3DPRESENT_INTERVAL_ONEはウィンドウ化されたアプリケーションでは機能しないと述べています。
とにかくvsyncを有効にするにはどうすればよいですか?
psついに、D3D vsyncが有効になっていることがわかりましたが、一部のウィンドウ設定が正しくないため、ウィンドウ自体が同期されていない可能性があります。しかし、私は設定を覗き見していません。
directx - 誰かがいくつかの固定パイプラインシェーダーチュートリアルまたはサンプルを知っていますか?
3dgamestudioa8無料版でゲームを作っています。無料版はシェーダーをサポートしていません。固定パイプラインシェーダーのみをサポートしています。3d gamestudioのwikiにはいくつかのサンプルがあります(ここをクリック)が、もっと多くのサンプルやチュートリアルがあることを知りたいです。