DirectX中的拉伸blit会导致锯齿状边缘

时间:2009-12-21 14:19:57

标签: directx direct3d directdraw

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

这种方法很好,除了一些视频卡/ OS /驱动程序组合(nVidia Quadro,DX11,Windows 7),其中blit似乎是使用点采样完成的,导致锯齿状边缘和通常不平滑的最终图像。

有什么方法可以避免这种情况吗?例如,强制Blt在放大时使用线性滤波器?

(注意:我知道我可以将原始的800x600资产渲染到960x720而不是最后拉伸,但这有其他缺点,所以最后拉伸是首选解决方案)

2 个答案:

答案 0 :(得分:1)

我认为没有办法控制这个。我读到了一些内容,说这个行为在windows7中已经改变了一些驱动程序,但我现在找不到引用。

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

答案 1 :(得分:0)

您是否考虑过将场景渲染到纹理然后将该纹理渲染到后台缓冲区?这会让你胆怯。

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

但是,为了获得最佳效果,您真的只需要渲染到适当大小的后备缓冲区即可。即如果您想要1280x720 ...渲染到具有适当视野和宽高比修改的1280x720后缓冲区。

相关问题