2012-09-25 14 views
8

Me gustaría escribir un trazador de rayos simple usando WPF. Es un proyecto de aprendizaje y, por lo tanto, prefiero la configurabilidad sobre el rendimiento (de lo contrario, me gustaría ir a C++).Plano rápido de píxeles en WPF

Todavía quiero un dibujo de píxel relativamente rápido. Un previous question en StackOverflow contiene código para lograr esto en WPF, obteniendo un mapa de bits GDI. Desde los relativamente poco que sé de programación de Windows,

  1. GDI es lenta
  2. DirectX es rápido
  3. WPF utiliza DirectX debajo (no está seguro de qué partes de WPF aunque)

¿Es posible para obtener acceso a nivel de píxel usando DirectX (no GDI) a través del lienzo de WPF (o similar)?

También consideraré sugerencias para incorporar llamadas API DirectX dentro de una ventana WPF (junto con otros controles WPF) si eso es posible.

Gracias de antemano.

+0

Lo más simple sería crear una aplicación de línea de comandos que renderice algo simple como un tetraedro y guardarlo en un png. Una vez que tenga eso, habrá resuelto muchos problemas relacionados con el Raytracer. Entonces puede preocuparse por dibujar en la pantalla, etc. – Indy9000

+0

@Gigi: No creo que sea prudente intentar escribir directamente en la pantalla en WPF; consulte aquí: http://blogs.msdn.com/b/greg_schechter/ archive/2006/05/02/588934.aspx – Surfbutler

+2

Creo que usar un 'WritableBitmap' podría ser una buena idea. – CodesInChaos

Respuesta

5

Interesante, pero con el trazado de rayos, escribiendo a los píxeles de la pantalla (debería) no sea la parte lenta. Sin embargo, puede usar WriteableBitmap para este propósito. Sin duda es lo suficientemente rápido para lo que quieres.

http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.writeablebitmap.aspx

(Para información, lo uso en este emu/IDE - http://0x10c-devkit.com/ - y se puede actualizar una baja res muestran con un gran rendimiento Ahí está la fuente a la del repositorio GitHub, el plugin LEM1802..)

Ah, este bit: https://github.com/kierenj/0x10c-DevKit/blob/master/PluginAPI/NyaElektriska.LEM1802/GPU.cs - vea UpdateDisplay.

+0

Has planteado un punto válido. Haré una investigación basada en los enlaces provistos, y probablemente vaya con esto. – Gigi

+0

Solo para seguir con la respuesta, este enlace me resultó útil al intentar mi implementación: http://tipsandtricks.runicsoft.com/CSharp/WpfPixelDrawing.html – Gigi

2

Hay un Lienzo Directo de Proyecto de Origen abierto que es una API de dibujo 2D acelerada por hardware que admite gráficos vectoriales, archivos multimedia, sombreadores de píxeles extensibles, modos de fusión y más.

http://directcanvas.codeplex.com/

demostración http://www.youtube.com/user/jdollah69#p/u

+0

A menos que el trazado de rayos se realice en un sombreador de píxeles, no sirve de nada, y definitivamente no habrá uso para gráficos vectoriales, archivos multimedia o modos de fusión. Dude quiere escribir píxeles, eso es todo –

Cuestiones relacionadas