1

我有一个 Direct3D 应用程序,它以固定分辨率(比如 800x600)运行窗口或全屏。为了支持宽屏模式,我以 800x600 渲染到后缓冲区,然后使用 Blt 将最后一帧绘制到前缓冲区的一部分中,该部分通常更大(比如 1280x720),因此 800x600 图像被拉伸到 960x720 以保持纵横比。

这工作正常,除了在某些视频卡/操作系统/驱动程序组合(nVidia Quadro、DX11、Windows 7)中,blit 似乎是使用点采样完成的,导致锯齿状边缘和通常不平滑的最终图像。

有没有办法避免这种情况?例如,在放大时强制 Blt 使用线性滤波器?

(注意:我知道我可以将原始的 800x600 资源渲染为 960x720 而不是在最后进行拉伸,但这还有其他缺点,因此在最后进行拉伸是首选解决方案)

4

2 回答 2

1

我认为没有任何方法可以控制这一点。我读到一些东西说这种行为在 windows7 中通过一些驱动程序发生了变化,但我现在找不到参考。

您也许可以渲染到 800x600 的纹理,然后在实际屏幕尺寸下使用此纹理绘制一个全屏四边形。那么至少你可以控制过滤。

于 2009-12-23T11:19:08.897 回答
0

您是否考虑过将场景渲染为纹理,然后将该纹理渲染到拉伸后的缓冲区?这会让你感到沮丧。

它在某些机器上工作的原因是,这正是驱动程序实现 blit 的方式

但是,为了获得最佳结果,您真的最好只渲染到适当大小的后备缓冲区。即,如果您想要 1280x720 ... 渲染到 1280x720 的后台缓冲区,并进行适当的视野和纵横比修改。

于 2010-01-15T10:07:45.347 回答