【问题标题】:How to set a outer geometry mask in d2d so d2d only draws outside that geometry如何在 d2d 中设置外部几何蒙版,以便 d2d 仅在该几何图形之外绘制
【发布时间】:2016-08-18 16:54:31
【问题描述】:

我正在研究 API,它要求我在 ID2D1Rendertarget 上设置一个外部几何掩码,以便之后的任何绘图调用仅绘制位于该几何之外的绘图部分。

https://msdn.microsoft.com/en-us/library/windows/desktop/dd756675(v=vs.85).aspx 解释了我们如何在 ID2D1Rendertarget 上设置内部几何蒙版,这样之后的任何绘制调用都只绘制位于该几何内部的图形的一部分。我想实现与此相反的。这可能吗?任何帮助都深表感谢。

【问题讨论】:

    标签: directx direct2d


    【解决方案1】:

    一种方法是从填充整个渲染目标的矩形中减去几何图形。查看combining geometries 上的 MSDN 页面。我在下面有一个小代码示例:

    ComPtr<ID2D1PathGeometry> invertedGeometry;
    ComPtr<ID2D1RectangleGeometry> rectangleGeometry;
    d2dFactory->CreateRectangleGeometry(
        { 0, 0, targetWidth, targetHeight }, 
        &rectangleGeometry
        );
    
    ComPtr<ID2D1GeometrySink> geometrySink;
    d2dFactory->CreatePathGeometry(&invertedGeometry);
    invertedGeometry->Open(&geometrySink);
    rectangleGeometry->CombineWithGeometry(
        pathGeometry.Get(), 
        D2D1_COMBINE_MODE_EXCLUDE, 
        D2D1::Matrix3x2F::Identity(), 
        geometrySink.Get()
        );
    geometrySink->Close();
    

    使用反转几何作为几何蒙版,而不是原始路径几何。

    第二种方法是将几何图形光栅化为位图并将其用作不透明蒙版。您可以根据是否要遮盖内部或外部来翻转颜色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 2016-09-02
      • 2019-02-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多