2013-03-28 56 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

相关问题