C# WPF中的快速像素绘制

C# WPF中的快速像素绘制,c#,wpf,raytracing,C#,Wpf,Raytracing,我想使用WPF编写一个简单的光线跟踪器。这是一个学习项目,因此我更喜欢可配置性而不是性能(否则我会选择C++) 我仍然想要相对快速的像素绘制。OnStackOverflow包含通过获取GDI位图在WPF中实现这一点的代码。我对Windows编程的了解相对较少 GDI很慢 DirectX很快 WPF在下面使用DirectX(但不确定WPF的哪些部分) 是否可以通过WPF画布(或类似)使用DirectX(而不是GDI)获得像素级访问 我也会考虑在WPF窗口内(如果有可能的话)将DirectX API

我想使用WPF编写一个简单的光线跟踪器。这是一个学习项目,因此我更喜欢可配置性而不是性能(否则我会选择C++)

我仍然想要相对快速的像素绘制。OnStackOverflow包含通过获取GDI位图在WPF中实现这一点的代码。我对Windows编程的了解相对较少

  • GDI很慢
  • DirectX很快
  • WPF在下面使用DirectX(但不确定WPF的哪些部分)
  • 是否可以通过WPF画布(或类似)使用DirectX(而不是GDI)获得像素级访问

    我也会考虑在WPF窗口内(如果有可能的话)将DirectX API调用合并在一起的建议。


    提前感谢。

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


    演示很有趣,但是使用光线跟踪,将像素写入屏幕将(应该)不是慢的部分。不过,您可以使用
    WriteableBitmap
    。它当然足够快,满足你的需要

    (关于信息,我在这个emu/IDE中使用了它——它可以刷新低分辨率的显示,并具有很好的性能。github存储库中有相关的源代码,即LEM1802插件。)


    啊,这一点:-参见
    UpdateDisplay

    另一个解决方案是。它扩展了内置的WriteableBitmap。

    最简单的方法是创建一个命令行应用程序,用于呈现简单的东西,如四面体,并将其保存到png。一旦你有了它,你就会解决很多与光线跟踪器本身有关的问题。然后你可以担心画到屏幕上等等。@Gigi:我认为尝试直接用WPF写到屏幕上是不明智的-请看这里:我认为使用
    WritableBitmap
    可能是个好主意。@Surfbutler-这与使用GDI有关,Gigi已经做出了裁决out@KierenJohnstone:我支持我之前链接到的文章-它表明不允许直接写入主屏幕,而且速度会很慢(请参阅最后一节“在屏幕上绘制和读取”,除非光线跟踪是在像素着色器中完成的,否则没有任何用处,矢量图形、多媒体文件或混合模式也绝对没有用处。Dude想写像素,这就是你提出的所有有效点。我将根据提供的链接进行一些研究,可能还有继续。为了回答这个问题,我发现这个链接在尝试实现时很有用: