0

WireFrame モードで表示したいメッシュを作成しました。私は現在、GraphicsDeviceをこのように設定しています...

TheGraphicsDevice.RasterizerState = new RasterizerState()
{
    FillMode = FillMode.WireFrame,
    CullMode = CullMode.None
};

これは私がやりたいことですが、Draw() が呼び出されるたびに RasterizerState を設定する必要があるようです。

RasterizerState を WireFrame に一度だけ設定する方法はありますか? (GraphicsDevice 変数を最初に宣言したときのように?) 考えられるすべての組み合わせを試しましたが、Draw() メソッドで (再) 設定した場合にのみ機能するようです。

4

1 に答える 1

1

3D アイテムと 2D アイテムの組み合わせを (SpriteBatch を使用して) 描画している場合、呼び出すspriteBatch.Begin()と塗りつぶしモードがソリッドにリセットされます。その場合、3D アイテムを描画するときに各フレームをワイヤーフレームに設定する (またはスプライトバッチで saveState を使用する) 必要があります。

3D アイテムのみを描画している場合は、初期化中に 1 回設定すれば、何度もリセットする必要はありません。

フレームごとに設定する必要がある場合は、スニペットのようにしないでください。これは、gc(ed) が必要になるフレームごとに新しいメモリを割り当てています。代わりに、1 つのカスタム RasterizationState オブジェクトを作成し、それを各フレームで再利用します。

于 2013-03-28T13:56:05.787 に答える