WPF中快速像素绘制

8
我想使用WPF编写一个简单的光线追踪器。这是一个学习项目,因此我更注重可配置性而非性能(否则我会选择C++)。
我仍希望相对快速地绘制像素。StackOverflow上的先前问题中包含了在WPF中通过获取GDI位图来实现这一点的代码。根据我所知,Windows编程有以下几点:
  1. GDI很慢
  2. DirectX很快
  3. WPF在底层使用DirectX(不确定WPF的哪些部分)
是否可以通过WPF Canvas(或类似控件)使用DirectX(而非GDI)获得像素级别的访问?
如果可能的话,我也会考虑将DirectX API调用合并到WPF窗口中(与其他WPF控件并存)。
提前感谢您。

2
我认为使用 WritableBitmap 可能是一个不错的主意。 - CodesInChaos
1
@Surfbutler - 这涉及使用GDI,而Gigi已经排除了这个选项。 - Kieren Johnstone
@KierenJohnstone:我坚持之前链接的文章 - 它表明不允许直接写入主屏幕,并且这样做也会很慢(请参见最后一节“绘制和从屏幕读取”)。 - Surfbutler
@Surfbutler 我认为你链接的文章讨论的是不同的问题 - 即直接写入视频内存而不是写入窗口(或其组件),这正是我想要做的。此外,作者正在警告某些 GDI 特定的事情。 - Gigi
@Gigi:好的,说得对,我只是不想让你遇到问题——我也赞成使用WritableBitmap! - Surfbutler
显示剩余2条评论
3个回答

5
有趣的是,使用光线追踪时,将像素写入屏幕不会(应该不会)是慢的部分。您可以使用WriteableBitmap实现此目的。它对于您想要的内容肯定足够快。
有关信息,请参见:http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.writeablebitmap.aspx (供参考,我在这个模拟器/IDE中使用它 - http://0x10c-devkit.com/ - 它可以以出色的性能刷新低分辨率显示。在github存储库上有源代码,LEM1802插件。)
啊,这一点:https://github.com/kierenj/0x10c-DevKit/blob/master/PluginAPI/NyaElektriska.LEM1802/GPU.cs - 请参见UpdateDisplay

你提出了一个有价值的观点。我会根据提供的链接进行一些研究,并可能采用这种方法。 - Gigi
为了配合答案,我在尝试实现时找到了这个链接很有帮助:http://tipsandtricks.runicsoft.com/CSharp/WpfPixelDrawing.html - Gigi

3

2

除非光线追踪是在像素着色器中完成的,否则这没有用处,矢量图形、多媒体文件或混合模式肯定也没有用。那家伙只想写像素而已。 - Kieren Johnstone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接