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

DirectX中的拉伸blit会导致锯齿状边缘,directx,direct3d,directdraw,Directx,Direct3d,Directdraw,我有一个Direct3D应用程序,它以固定的分辨率(比如800x600)运行窗口或全屏。为了支持宽屏模式,我在800x600处渲染到后缓冲区,然后使用Blt将最终帧绘制到前缓冲区的一部分,该部分通常更大(比如1280x720),因此800x600图像被拉伸到960x720以保持纵横比 这很好,除了在某些视频卡/操作系统/驱动程序组合(nVidia Quadro、DX11、Windows 7)中,blit似乎是使用点采样完成的,从而导致锯齿状边缘和通常不平滑的最终图像 有没有办法避免这种情况?例如

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

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

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


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

我认为没有任何方法可以控制这一点。我读到有人说windows7中的某些驱动程序改变了这种行为,但我现在找不到参考


您可能可以渲染为800x600的纹理,然后使用该纹理以实际屏幕大小绘制一个全屏四边形。那么至少你可以控制过滤。

我认为没有任何方法可以控制这一点。我读到有人说windows7中的某些驱动程序改变了这种行为,但我现在找不到参考


您可能可以渲染为800x600的纹理,然后使用该纹理以实际屏幕大小绘制一个全屏四边形。然后至少可以控制过滤。

是否考虑过将场景渲染为纹理,然后将该纹理渲染为backbuffer?这会给你带来快乐

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


不过,为了获得最佳效果,您确实需要将渲染设置为适当大小的backbuffer。如果你想要1280x720。。。使用适当的视场和纵横比修改,渲染到1280x720后缓冲区。

您是否考虑过将场景渲染为纹理,然后将该纹理渲染到后缓冲区?这会给你带来快乐

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


不过,为了获得最佳效果,您确实需要将渲染设置为适当大小的backbuffer。如果你想要1280x720。。。使用适当的视场和纵横比修改,渲染到1280x720后缓冲区。

是的,我几天前确实渲染到纹理,效果很好。我渲染到一个800x600的目标,然后拉伸最终的四边形,尽管-直接渲染到最终大小的缓冲区还有其他问题,正如我在原始帖子中所评论的。是的,我几天前确实渲染到纹理,效果很好。我渲染到一个800x600的目标,然后拉伸最终的四边形,但是-直接渲染到最终大小的缓冲区还有其他问题,正如我在我的原始帖子中所评论的。我很想知道这些缺点是什么,因为我相信你最好做得正确,而不是像上面那样做。至少你所有的3D渲染看起来都是正确的…我很想知道这些缺点是什么,因为我相信你最好是正确地进行渲染,而不是像上面那样进行黑客攻击。至少你所有的3D渲染看起来都是正确的。。。