【问题标题】:Bilinear filtering of output image in Direct3D 11Direct3D 11 中输出图像的双线性过滤
【发布时间】:2015-11-24 03:34:53
【问题描述】:

我想以一种分辨率渲染某些东西,但以另一种分辨率在窗口中显示它(例如,以 640x480 渲染场景并将其拉伸到 1024x768 窗口)。

只需在创建后调整窗口大小即可实现这一点 - 但是,图像会使用最近邻过滤。有没有办法将过滤算法更改为例如双线性?

【问题讨论】:

    标签: image-resizing direct3d11


    【解决方案1】:

    基本上有三种方法:

    一种方法是使用始终为 640 x 480 的 Direct3D 后缓冲区,但允许 DXGI Present 处理缩放到其他一些窗口大小 (1024 x 768)。在 Direct3D 11.1 中,您可以使用 DXGI_SWAP_CHAIN_DESC1.Scaling 实现此目的,并将其设置为 DXGI_SCALING_STRETCH。在 Windows phone 8 或 Windows 10 上,您也可以使用 DXGI_SCALING_ASPECT_RATIO_STRETCH。在这种情况下,您无法控制过滤的实现方式,但它大多是自动的。

    DXGI_SCALING_ASPECT_RATIO_STRETCH 仅适用于使用 CreateSwapChainForCoreWindowCreateSwapChainForComposition 的 CoreWindow 和 DirectComposition 交换链(即不是使用 CreateSwapChainForHwnd 的经典 Win32 窗口)。要知道在输出窗口中实际放置纵横比的图像的位置,请参阅 DirectX 工具包的代码Viewport::ComputeDisplayArea

    另一种方法是调整后备缓冲区的大小以匹配输出窗口,然后在“全屏四边形”上使用纹理来实现拉伸。在这种情况下,您可以更直接地控制所使用的过滤。请参阅 DirectX 工具包的 SpriteBatchD3D11_FILTER

    最后,您可以在 CPU 上调整原始图像的大小。在这里,您可以最大程度地灵活控制调整大小,但性能会明显变慢。您也可以使用WICDirectXTex 调整大小。

    【讨论】:

    • 谢谢。我实际上是在尝试修改现有的应用程序来做到这一点。第二种方法可以通过在渲染整个场景之前和之后插入一些调用来完成吗?
    猜你喜欢
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    相关资源
    最近更新 更多