我有一个我希望在WireFrame模式下查看的网格。 我目前正在以这种方式设置我的GraphicsDevice ......
TheGraphicsDevice.RasterizerState = new RasterizerState()
{
FillMode = FillMode.WireFrame,
CullMode = CullMode.None
};
这就是我想要的,但似乎每次调用Draw()时都必须设置RasterizerState。
有没有办法将RasterizerState设置为WireFrame一次? (就像我第一次声明我的GraphicsDevice变量?) 我已经尝试了我能想到的每一个组合,但它似乎只有在我(重新)在Draw()方法中设置时才有效。
答案 0 :(得分:1)
如果要绘制3d项目和2d项目的组合(使用SpriteBatch),则调用spriteBatch.Begin()
会将fillmode重置为solid。因此,在这种情况下,您必须在绘制3d项目时将其设置为线框每个框架(或使用带有spritebatch的saveState)。
如果您只是绘制3d项目,那么您可以在初始化期间设置一次,而不需要继续重置它。
如果您需要在每个帧中进行设置,请不要像您的代码段那样进行设置。这是为每个帧分配新的内存,最终需要gc(ed)。而是,创建一个自定义RasterizationState对象并在每个帧重用它。