2010-12-07 59 views
1

Le projet sur lequel je travaille nécessite la possibilité de transformer l'un des 4 coins d'une image. Comme GDI + n'a malheureusement pas cette capacité, nous avons recours aux graphiques 3D de DirectX.Le rendu de graphiques 3D DirectX directement sur une image, en utilisant C#

Alors que j'ai un maillage carré avec une texture qui s'affiche avec succès à l'écran, j'ai besoin de pouvoir générer une image à partir de ce rendu, avec l'arrière-plan défini sur transparent. Y a-t-il un moyen d'y parvenir efficacement?

De préférence, je voudrais le faire sans utiliser de contrôle pour initialiser un périphérique. Alternativement, je ne me dérange pas l'option de créer un contrôle invisible et personnalisé qui va générer une image pour moi.

Modifier:

En fait, je viens de réaliser est strictement pas nécessaire un fond transparent, mais il contribuerait à la performance de notre projet un peu.

De toute façon, j'ai eu de la chance en faisant quelque chose comme ça, mais c'est excessivement lent. Peut-être qu'il y a une meilleure méthode?

// 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

J'ai remarqué que le constructeur Surface accepte un bitmap. Si je construisais une surface avec un bitmap en mémoire, rendrait-il également à cette surface la mise à jour du bitmap? – Japtar

+0

Je me demandais si la construction d'une surface et d'un bitmap avec les mêmes informations de flux fonctionnerait aussi ... – Japtar

Répondre

0

Eh bien, si vous utilisez D3D pour faire le rendu final à l'écran, vous pouvez facilement faire les choses dont vous parlez avec render à texture.

+0

Je vais essayer d'y jeter un coup d'oeil, mais si cela ne vous dérange pas, pourriez-vous fournir quelques exemples? – Japtar