在其他几种情况下,在 2D(Android 的 Canvas、GDI 的图形)中,我曾经在调用绘图方法之前剪辑我的绘图。
我如何使用 XNA 实现这一目标?
由于我正在绘制一些图元DrawUserPrimitive
,但还没有找到任何方法来剪辑这些图元。可能吗?如何?
改变视口或类似的东西会允许这样做吗?使用 aBasicEffect
时,还有World
,View
和Projection
矩阵。我还没有深入研究这些。
一个。您可以更改视口
GraphicsDevice.Viewport = yourCamera.Viewport;
GraphicsDevice.Viewport = new Viewport(yourClippingArea);
湾。您可以使用剪刀矩形...设置启用剪刀测试的光栅化状态...
GraphicsDevice.ScissorRectangle = yourClippingArea;
GraphicsDevice.RasterizerState =
new RasterizerState( ) { ScissorTestEnabled = true };
C。你可以使用模板缓冲区和模板操作..基本上这个方法是关于创建一个掩码并应用它
d。您可以在绘制之前剪辑...
(2D)
if (yourCamera.WorldBounds.Intersects( sprite.WorldBounds )
{
sprite.Draw();
}
(3D)
BoundingFrustum boundingFrustum = new BoundingFrustum( yourCamera.ViewProjection );
if (boundingFrustum.Contains(model.BoundingSphere)
{
mode.Draw();
}