2013-03-28 73 views
0

我有一個網格,我想在WireFrame模式下查看。 我目前設置我的GraphicsDevice這樣...XNA:有沒有辦法將RasterizerState設置爲WireFrame一次?

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

這是做我想要什麼,但似乎我必須設置RasterizerState每次抽獎()被調用。

有沒有辦法將RasterizerState設置爲WireFrame一次? (我喜歡當我第一次聲明我的GraphicsDevice變量?) 我試過每個組合我能想到的,但它似乎只有當我(重新)在Draw()方法中設置它的工作。

+0

這應該只需要聲明一次,以設置光柵器狀態。你是否在其他地方設置了光柵化器狀態? – 2013-03-28 05:00:52

+0

@Digby:不,這是我的整個解決方案中唯一指定RasterizerState的地方。我所能猜到的是GraphicsDevice正在重置某處,但我無法弄清楚在哪裏。 :( – tvwxyz 2013-03-28 05:44:55

回答

1

如果您正在繪製3d項目和2d項目的組合(使用SpriteBatch),則調用spriteBatch.Begin()將使填充模式重置爲固定。所以在這種情況下,當你繪製3D物品時,你必須將它設置爲每個框架的線框(或者用你的spritebatch使用saveState)。

如果您只是繪製3D項目,那麼您可以在初始化期間設置一次,而不需要保持重置。

如果你需要設置每一幀,不要像你的代碼片段那樣做。這是每幀分配新內存,最終需要gc(ed)。相反,製作一個自定義RasterizationState對象並在每一幀中重新使用它。

+0

感謝您的洞察!我沒有意識到SpriteBatch.Begin()重置填充模式。 – tvwxyz 2013-03-29 00:52:09

相關問題