【问题标题】:How to clip before DrawUserPrimitive?如何在 DrawUserPrimitive 之前剪辑?
【发布时间】:2012-08-16 14:21:57
【问题描述】:

在其他几种情况下,在 2D(Android 的 Canvas、GDI 的图形)中,我曾经在调用绘图方法之前剪辑我的绘图。

我如何使用 XNA 实现这一目标?

感谢DrawUserPrimitive,我正在绘制一些图元,但还没有找到任何方法来剪裁这些图元。可能吗?怎么样?

改变视口或类似的东西会允许这样做吗?当使用BasicEffect 时,还有WorldViewProjection 矩阵。我还没有深入研究这些。

【问题讨论】:

    标签: 3d xna monogame


    【解决方案1】:

    一个。您可以更改视口

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

    【讨论】:

    • 对不起,我认为在这一步之前我需要做一些工作。我很快就会回来。无论如何,感谢您的回答,看来它会引导我找到好方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    相关资源
    最近更新 更多