4

XNA4.0でシンプルな3Dモデルビューアを開発しています。描画機能と更新機能で無限のゲームループを回避する方法はありますか?3Dグラフィックスをレンダリングする必要がありますが、シーンを無限にレンダリングする必要はありません。つまり、シーンを再描画する必要があるのは、それが実際に変わったときだけです。

4

4 に答える 4

4

サンプルで彼らがどのようにそれを行っているかを見てみることをお勧めします。

AppHub-WinFormsシリーズ
1AppHub-WinFormsシリーズ2

于 2012-01-10T12:16:01.740 に答える
2

なぜこれが欲しいのですか?

winformsアプリケーションを使用する場合は、更新と描画のループをより細かく制御できますが、最初にシーンをテクスチャにレンダリングしてから、レンダリングを完全に停止することもできます。

于 2012-01-10T12:14:30.367 に答える
1

独自のマルチスレッドループをロールする必要があります。どちらか一方をストールするUpdateDraw、もう一方もストールします。もう1つの考慮事項は、ウィンドウが何らかの理由で(DWM以外の環境、たとえばウィンドウが重なっている場合)ストールするDrawと、ウィンドウの領域がペイントされないままになることです。

これを進めたい場合は、あなたがすることはThread、最初Updateに呼び出されたときに開始し、その後、を使用しManualResetEventて2つを同期することです。

はるかに堅牢なオプションはRenderTarget2D、シーンが更新されたときにシーン全体をレンダリングすることです。シーンが最後から変更されていない場合、Updateまたは呼び出しは、シーン全体ではなくDraw単にレンダリングします。RenderTarget2Dこれはまだ無限ループですが、(それが満たされていない場合でも)要件に近づく傾向があります。

于 2012-01-10T12:49:11.040 に答える
1

この種のシナリオは、レンダリングシステムのホストとしてWinFormsまたはWPFを使用することで最もよく解決されます。私は以前にそのようなシステムで作業したことがあり、 WPF相互運用機能でSlimDXを使用することが私の好ましい解決策であることがわかりました。このアプローチを使用すると、WPFによって提供される優れたUI機能を、サーフェスにレンダリングされた3Dモデルにオーバーレイして追加できます。

于 2012-01-10T12:59:17.377 に答える