使用Direct3D渲染2D图像

时间:2017-04-04 11:19:21

标签: winapi directx gdi+ direct3d direct2d

我正在尝试用Direct3D替换我的GDIPlus渲染。我正在渲染一些大的图像(10K x 10K),并且GDI的速度非常慢。我现在使用Direct3D将图像作为纹理渲染到Quad上。图像会渲染,但在缩小图像时质量确实关闭。

我正在使用以下过滤器。

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);

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

1 个答案:

答案 0 :(得分:1)

您不能在质量好的小表面上渲染大图像,而无需付出大量过滤的代价。

这是一个名为别名的信号处理问题。要重现信号,您需要一种分辨率至少为两倍的介质,否则光谱会折叠。

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

如果您的图像是动态的,并且您知道显示区域,则您更喜欢运行时过滤,但要使用GPU进行此操作,您必须使用着色器最近直接x版本或使用临时屏幕外表面来打乒乓逐步减少。