【发布时间】:2011-07-06 13:24:09
【问题描述】:
我正在构建一个歌曲可视化,我需要每 50 毫秒计算一个新位图,并通过在图片框上绘制它来在表单上显示它。
不幸的是,使用 DrawImage / DrawLine 时,此图像的渲染/绘画性能并不快。
有没有办法通过使用 XNA / DirectX 来改进?
哪个更适合这项任务?
有什么例子吗?
【问题讨论】:
我正在构建一个歌曲可视化,我需要每 50 毫秒计算一个新位图,并通过在图片框上绘制它来在表单上显示它。
不幸的是,使用 DrawImage / DrawLine 时,此图像的渲染/绘画性能并不快。
有没有办法通过使用 XNA / DirectX 来改进?
哪个更适合这项任务?
有什么例子吗?
【问题讨论】:
【讨论】:
我同意以类似于 winforms 示例的方式使用 xna。
我认为你可能不是通过渲染位图或使用 SpriteBatch 而是通过创建一个动态顶点缓冲区来包含所有线条的所有端点来获得线条的最佳外观和性能。然后使用 DrawUserPrimitives() 并将primitiveType 参数指定为 PrimitiveType.LineList。
这会将所有这些点发送到 GPU,在那里您可以在线条上创建各种效果(着色器),而 GPU 会完成所有繁重的工作。
应用中心的教育部分中的一些示例使用这种渲染来制作网格。想到的一个是perPixelLighting sample。您可能(或可能不需要)需要在 3d 空间中进行一些工作。
【讨论】: