与Direct3D 10的最佳2D集成?

时间:2011-09-07 21:37:26

标签: direct3d directx-10 direct2d

我有一个应用程序,到目前为止,主要是DirectX 10 3D图形。现在我们想要生成一些实时2D图像以显示在屏幕的一部分上。将使用来自外部硬件的原始数据生成2D图形 - 每个值将转换为像素颜色和位置。

我已经看过Direct2D集成选项,但我没有看到一种直接的方法来逐个像素地绘制表面,而只是常见的线条和形状。

我相信也可以只使用Direct3D(不使用Direct2D),只需为每个像素设置一个简单的顶点,然后在正交视图中绘制它。

在生成实时2D图形时,使用Direct2D是否可以提高效率?我不想使用形状工具,所以这对我来说不是一个卖点。在Direct3D应用程序中生成2D图形的其他常用做法是否会更好?

任何指针都将非常感激。谢谢。

2 个答案:

答案 0 :(得分:1)

在D3D应用程序中绘制2D图形(UI等)的常规方法是在纹理中存储您需要的任何位图图像数据,并绘制纹理2D四边形以显示它。这为您提供免费的缩放,旋转,过滤等硬件加速。

如果您想要像素精确地再现源图像,则需要确保考虑屏幕分辨率并使用正确的顶点位置绘制四边形。 Direct3D 10Direct3D 9更容易。

答案 1 :(得分:1)

您的问题的答案是纹理2D四边形

只需创建一个带有以下顶点的顶点着色器:

(0.0f, 0.0f, 0.0f, 0.0f, 1.0f),
(0.0f, 1.0f, 0.0f, 0.0f, 0.0f),
(1.0f, 1.0f, 0.0f, 1.0f, 0.0f),
(1.0f, 0.0f, 0.0f, 1.0f, 1.0f)

顶点布局 (位置x,位置y,位置z,纹理坐标x,纹理坐标y)。

适当的索引缓冲区。

然后简单地将适当的纹理绑定为着色器资源和矩阵,以根据需要平移/旋转/缩放四边形。在顶点着色器中使用矩阵变换顶点位置,并在像素着色器样本中对着色器资源进行纹理处理。

如果你想简单地更新纹理Map()它,更新你想要的任何像素,Unmap()它并再次绑定到像素着色器。