我有一个应用程序,到目前为止,它主要是DirectX 10 3D图形。现在我们想要生成一些实时的2D图像,以在屏幕的一部分上显示。2D图形将通过使用来自外部硬件的原始数据生成-每个值都将转换为像素颜色和位置。
我已经研究了Direct2D集成选项,但我没有看到一种简单的方法来逐个像素地绘制表面,而仅仅是普通的线条和形状。
我相信用Direct3D (不使用Direct2D)也可以做到这一点,只需要为每个像素创建一个简单的顶点,然后在正交视图中绘制它。
在生成实时2D图形时,使用Direct2D能提高效率吗?我不想使用形状工具,所以这对我来说不是一个真正的卖点。在Direct3D应用程序中生成2D图形有没有其他更好的通用实践?
如果有任何建议,我们将非常感谢。谢谢。
发布于 2011-09-14 01:44:19
绘制2D图形(UI等)的常规方法在D3D应用程序中是存储任何位图图像数据,你需要纹理和绘制纹理二维四边形来显示它。免费为您提供缩放、旋转、过滤等硬件加速。
如果你想要精确的再现你的源图像,你需要确保你考虑到屏幕的分辨率,并用正确的顶点位置绘制你的四边形。这在Direct3D 10中比在Direct3D 9中更容易。
发布于 2011-10-02 08:57:22
您的问题的答案是纹理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)。
以及适当的索引缓冲器。
然后,只需绑定适当的纹理作为着色器资源和矩阵,以根据需要平移/旋转/缩放四边形。在顶点着色器中,使用矩阵变换顶点位置;在像素着色器中,对聚集纹理的着色器资源进行采样。
如果你想更新纹理,只需映射()它,更新你想要的任何像素,取消映射()它,并再次将它绑定到像素着色器。
https://stackoverflow.com/questions/7340800
复制相似问题