2012-09-25 103 views
8

我想用WPF写一个简单的光线跟踪器。这是一个学习项目,因此我喜欢可配置的性能(否则我会选择C++)。WPF中的快速像素绘制

我仍然想要相对较快的像素绘制。在StackOverflow上的previous question包含通过获取GDI位图在WPF中实现此目的的代码。从相对小我知道的Windows编程,

  1. GDI缓慢
  2. DirectX是快速
  3. WPF使用DirectX下(不知道这虽然WPF的部分)

是否有可能使用DirectX(而不是GDI)通过WPF Canvas(或类似的)获得像素级访问?

我也会考虑将WPF窗口(和其他WPF控件一起)中的DirectX API调用结合起来的建议(如果可能的话)。

在此先感谢。

+0

最简单的方法是创建一个命令行应用程序,该应用程序呈现一些像四面体一样简单并将其保存为PNG的应用程序。一旦你有了,你会解决很多与raytracer本身相关的问题。然后你可以担心绘图到屏幕等。 – Indy9000

+0

@Gigi:我不认为这是明智的尝试直接写在WPF屏幕 - 请参阅这里:http://blogs.msdn.com/b/greg_schechter/ archive/2006/05/02/588934.aspx – Surfbutler

+2

我认为使用'WritableBitmap'可能是一个好主意。 – CodesInChaos

回答

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

+0

您提出了一个有效的观点。我会根据提供的链接进行一些研究,并可能与此相关。 – Gigi

+0

只要随答案一起去,我发现这个链接在尝试我的实现时很有用:http://tipsandtricks.runicsoft.com/CSharp/WpfPixelDrawing.html – Gigi

2

有一个名为直接画布的开源项目,这是一个硬件加速的2D绘图API,支持矢量图形,多媒体文件,可扩展像素着色器,混合模式等等!

http://directcanvas.codeplex.com/

演示http://www.youtube.com/user/jdollah69#p/u

+0

除非光线跟踪是在像素着色器中完成的,否则这没有用,对矢量图形,多媒体文件或混合模式肯定没有用处。伙计想写像素,这就是全部 –