2012-09-25 195 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

除非光線跟蹤是在像素着色器中完成的,否則這沒有用,對矢量圖形,多媒體文件或混合模式肯定沒有用處。夥計想寫像素,這就是全部 –