3d 如何在绘图前进行剪裁?

3d 如何在绘图前进行剪裁?,3d,xna,monogame,3d,Xna,Monogame,在其他一些环境中,在2D(Android的Canvas,GDI的图形)中,我在调用绘图方法之前会先剪辑我的绘图 我如何使用XNA实现这一点 由于DrawUserPrimitive,我正在绘制一些原语,但还没有找到任何方法来剪裁这些原语。可能吗?怎么做 更改视口或类似的内容会允许这样做吗?使用basicefect时,还有World、View和Projection矩阵。我还没有深入研究这些。可以更改视口 GraphicsDevice.Viewport = yourCamera.Viewport;

在其他一些环境中,在2D(Android的Canvas,GDI的图形)中,我在调用绘图方法之前会先剪辑我的绘图

我如何使用XNA实现这一点

由于
DrawUserPrimitive
,我正在绘制一些原语,但还没有找到任何方法来剪裁这些原语。可能吗?怎么做


更改视口或类似的内容会允许这样做吗?使用
basicefect
时,还有
World
View
Projection
矩阵。我还没有深入研究这些。可以更改视口

 GraphicsDevice.Viewport = yourCamera.Viewport;   
 GraphicsDevice.Viewport = new Viewport(yourClippingArea);
b。你可以使用一个剪式矩形。。。正在设置启用剪刀测试的光栅化器状态

 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();
 }

抱歉,我想在这一步之前我需要做一些工作。我很快就会回来的。不管怎样,谢谢你的回答,看来这会引导我走上好的道路。