2010-12-07 6 views
1

Das Projekt, an dem ich gerade arbeite, benötigt die Möglichkeit, eine der vier Ecken eines Bildes zu transformieren. Da GDI + diese Fähigkeit leider nicht besitzt, greifen wir auf die 3D-Grafik von DirectX zurück.Rendern von DirectX-3D-Grafiken direkt auf ein Bild unter Verwendung von C#

Während ich ein Quadratmesh mit einer Textur habe, die erfolgreich auf dem Bildschirm angezeigt wird, muss ich in der Lage sein, ein Bild von diesem Rendering zu generieren, wobei der Hintergrund auf transparent gesetzt ist. Gibt es eine Möglichkeit, dies effizient zu erreichen?

Am liebsten würde ich dies tun, ohne ein Control für die Initialisierung eines Geräts zu verwenden. Alternativ ist es mir egal, dass ich ein benutzerdefiniertes, unsichtbares Steuerelement erstellen kann, das ein Bild für mich generiert.

bearbeiten:

Eigentlich wurde mir klar, nur einen transparenten Hintergrund streng genommen nicht notwendig ist, aber es würde die Leistung unseres Projekts ein wenig helfen.

Wie auch immer, ich hatte etwas Glück, etwas zu tun, aber es ist übermäßig langsam. Vielleicht gibt es eine bessere Methode?

// Create a surface to render an image to 
Surface mSurface = mDevice.GetRenderTarget(0); 

// Render the visualization 
mDevice.Clear(ClearFlags.Target, Color.Transparent, 1.0f, 0); 
mDevice.BeginScene(); 

/* Do some amazing stuff */ 

// Exit rendering 
mDevice.EndScene(); 
mDevice.Present(); 

// Render the bitmap images 
GraphicsStream mGraphics = SurfaceLoader.SaveToStream(
     ImageFileFormat.Bmp, mSurface); 
Image mImage = new Bitmap(mGraphics, false); 
+0

Ich bemerkte, dass der Oberflächenkonstruktor eine Bitmap aufnimmt. Wenn ich ein Surface mit einem Bitmap im Speicher erstellt habe, würde das Rendern auf dieses Surface das gehaltene Bitmap ebenfalls aktualisieren? – Japtar

+0

Ich frage mich, ob das Erstellen einer Oberfläche und einer Bitmap mit den gleichen Stream-Informationen auch funktionieren würde ... – Japtar

Antwort

0

Nun, wenn Sie D3D verwenden, um die finale Rendering dafür dann zu screenen, um die Dinge einfach tun können, Sie sprechen mit Render-to-Textur.

+0

Ich werde versuchen, es zu untersuchen, aber wenn es Ihnen nichts ausmacht, könnten Sie ein paar Beispiele liefern? – Japtar