Winapi 使用Direct3D绘制二维图像

Winapi 使用Direct3D绘制二维图像,winapi,directx,gdi+,direct3d,direct2d,Winapi,Directx,Gdi+,Direct3d,Direct2d,我正在尝试用Direct3D替换我的GDIPlus渲染。我正在渲染一些大图像的顺序(10K x 10K),它变得非常慢与GDI。我现在使用Direct3D将图像渲染为纹理到四边形上。图像确实会渲染,但当图像缩小时,质量确实会降低 我正在使用以下过滤器 m_pDevice3D->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); m_pDevice3D->SetSamplerState(0, D3DSAMP_MINFILTER,

我正在尝试用Direct3D替换我的GDIPlus渲染。我正在渲染一些大图像的顺序(10K x 10K),它变得非常慢与GDI。我现在使用Direct3D将图像渲染为纹理到四边形上。图像确实会渲染,但当图像缩小时,质量确实会降低

我正在使用以下过滤器

m_pDevice3D->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
m_pDevice3D->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
//m_pDevice3D->SetSamplerState(0, D3DSAMP_MAXANISOTROPY, 4);
m_pDevice3D->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);

我已经尝试过使用各向异性过滤器进行渲染,但没有明显的改进

如果不付出大量过滤的代价,就无法在小曲面上以良好的质量渲染大图像

这是一个名为“混叠”的信号处理问题。要再现一个信号,你需要一种分辨率至少为原来两倍的介质,否则光谱会自动折叠

在三维渲染中,典型的方法是生成mipchain。它包括预过滤版本的图像,将分辨率除以2,直到达到1x1的大小。然后GPU就可以选择正确的版本


如果您的图像是动态的,并且您知道显示区域,您会更喜欢运行时过滤,但要使用GPU进行过滤,您必须使用最新的direct x版本,使用着色器或使用临时屏幕外表面,以逐步缩小。屏幕截图可能会有所帮助?您好,我不是direct3d专家,你能告诉我什么是乒乓球表面,我怎么做?我目前正在研究cuda解码样本,它工作正常,但文档说它没有优化,它说“为了获得最佳性能,使用两个或更多的D3D9曲面在它们之间进行乒乓球运动。这使驾驶员可以在解码和显示两方面工作,而无需等待。”我搜索并找到了您的答案,但我仍然不知道乒乓球是什么。乒乓球技术是许多系统的基石,就像渲染引擎中的后处理一样。原理很简单,你有两个表面,你交替使用从渲染目标到纹理,读A和写B,然后读B和写A,等等…对于原始海报,在一个独特的步骤中应用一个大的高质量放大,分步骤进行可以简化问题(在这种情况下,如果你不想弄乱视口的话,你会有一系列越来越大的乒乓球表面)@Hamed今年年底会有点忙,但这就是它的用途:)另外,值得一提的是,乒乓球通常是必要的,因为你不能在适当的位置读写资源。这是真的,但不再适用于计算着色器及其RWBuffers和RWTextures。我想我现在该怎么办了。再次感谢!我照你说的做了,现在效果好多了,谢谢你的帮助。