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 与 spritebatch 一起使用)。

如果您只绘制 3d 项目,那么您可以在初始化期间设置一次,而无需继续重置它。

如果您需要在每一帧都设置它,请不要像您的代码片段那样进行设置。这就是为最终需要 gc(ed) 的每一帧分配新的内存。相反,制作一个自定义 RasterizationState 对象并在每一帧重用它。

于 2013-03-28T13:56:05.787 回答