www.rolandk.de
- Aktuelle Themen zu .Net -
Achtung: Hier handelt es sich um meine alte Seite.
Die aktuelle ist unter folgendem Link erreichbar: www.rolandk.de/wp/
Home Blog Mit DirectX einen Hintergrund mit Farbverlauf zeichnen




















































Mit DirectX einen Hintergrund mit Farbverlauf zeichnen
Sonntag, den 03. Oktober 2010 um 11:14 Uhr

WPF zeichnet alle Steuerelemente mit Direct3D. In diesem Zusammenhang wurde ich schon ein paar Mal gefragt, wie ein GradientBrush aus WPF in einer DirectX-Anwendung nachprogrammiert werden kann, also wie man mit DirectX-Funktionen einen konfigurierbaren Farbverlauf hinbekommt. Zunächst muss man

hier einmal schauen, was denn ein Brush in WPF eigentlich ist. Es gibt Brushes, die einen Farbverlauf abbilden. Es gibt Brushes, die Texturen zeichnen und es gibt sogar welche, die selber wieder Steuerelemente beherbergen können. Was genau in WPF ein Brush ist, weiß ich nicht, vermutlich handelt es sich aber im Hintergrund schlicht um eine Textur. Dies erkennt man bei den 3D-Fähigkeiten von WPF, da man hier Brushes genauso wie Texturen in DirectX verwenden kann (Siehe WPF-Tutorial). Aus diesem Grund bin ich folgendermaßen vorgegangen:

 

  1. System.Drawing.Brush erzeugen (z. B. LinearGradientBrush für Farbverlauf)
  2. Eine Bitmap erzeugen
  3. Ein Rechteck in das Bitmap mit dem eben erzeugten Brush zeichnen
  4. Inhalt des Bitmaps in eine neue Textur kopieren

Coding-technisch würde das in etwa so aussehen:

  1. using(Bitmap drawingBitmap = new Bitmap(m_width, m_height))
  2. {
  3. using (GDI.Graphics graphics = GDI.Graphics.FromImage(drawingBitmap))
  4. {
  5. graphics.FillRectangle(
  6. m_drawingBrush,
  7. new Rectangle(0, 0, m_width, m_height));
  8. graphics.Dispose();
  9. }
  10.  
  11. m_texture = GraphicsHelper.TextureFromBitmap(device, drawingBitmap);
  12. m_textureView = new D3D11.ShaderResourceView(device, m_texture);
  13. }

Die daraus entstandene Textur enthält jetzt also den Farbverlauf. Im nachfolgenden Screenshot habe ich genau eine solche Textur verwendet, um den Hintergrund zu zeichnen. Als 3D-Objekt wird ein flaches 3D-Objekt bestehend aus 2 Dreiecken verwendet, das sich über den ganzen Bildschirm erstreckt. Auf den Würfeln klebt übrigens eine Textur, die auf die gleiche Weise mit einem System.Drawing.Drawing2D.HatchBrush erzeugt wurde.

 

 

 

Kommentar hinzufügen

Ihr Name:
Kommentar: