1

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

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

我相信仅使用 Direct3D(不使用 Direct2D)也可以做到这一点,并且每个像素都有一个简单的顶点并在正交视图中绘制它。

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

任何指针将不胜感激。谢谢你。

4

2 回答 2

1

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

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

于 2011-09-13T17:44:18.590 回答
1

您的问题的答案是 Textured 2D quads

只需使用以下顶点创建一个顶点着色器:

(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() 它并再次将它绑定到像素着色器。

于 2011-10-02T00:57:22.117 回答