in una predente bloggata ho accennato a come utilizzare le MDX (la versione gestita delle famosissime DirectX), da vecchio appassionato di videogames mi sono lasciato catturare come un bambino, diciamolo subito avere le DirectX sotto l'ambinete gestistito di .net ci permette di creare applicazioni multimediali che fino a poco fa senza usare P-Invoke e simili non era possibile.
vediamo cosa è necessatio per realizzare la nostra prima applicazione MDX, nulla di eclatante inizializzeremo semplicemente la periferica.
il primo posso e scaricarsi SDK (220 mb) quà.
dopodiche creiamo una nuova soluzione con un progetto "applicazione per Windows", aggiungiamo i riferimenti Microsoft.DirectX e Microsoft.DirectX.Direct3D.
e scriviamo il medoto che si occupa dell'inizializzaione della perifericha (Device) la classe Device è assimilabile un pò all' tipo Graphic dell GDI+
public bool InitializeGraphics() { try { PresentParameters presentParams = new PresentParameters(); presentParams.Windowed=true; presentParams.SwapEffect = SwapEffect.Discard; device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams); return true; } catch (DirectXException) { return false; } }
impostiamo alcune proprietà, come il fatto che l'applicazione sarà eseguita in finetsra e il comportamento da tenere in caso di passaggio da Windowed a full (se ho capito bene la documentazione), infine creiamo una nuova istanza della classe Device, inzializzandola con l'elaborazione dei vertici via Software, in caso di eccezzione il metodo restituisce false.
nel metodo Main() della nostra Form andremo ad aggiungere:
using (Form1 frm = new Form1()) { if (!frm.InitializeGraphics()) { MessageBox.Show("impossibile inizializzare MDX."); return; } frm.Show(); while(frm.Created) { frm.Render(); Application.DoEvents(); } }
se l'aplicazione riesce a inizializzare la classe Device viene richiamato il metodo Render() (lo vedreomo subito) e elaborati i messaggi fino a quando il form rimane valido
private void Render() { if (device == null) return; device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0); device.BeginScene(); device.EndScene(); device.Present(); }
se device è nullo il programma esce subito dal metodo Render() altrimenti imposta il colore di sfondo della scena, iniaizlizza la scena la termina e presenta il contenuto , vuoto per adesso
questi sono i primi passi per entrare nel mondo 3D, adesso (più che adesso da un annetto :) anche alla portato di .net e dei linguaggi gestisti.
P.s. non so chi avrà notato che non parlo più di ImageFx, spero quanto prima di rendere disponibile tutto nel Lab di AspItalia :)
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Vi aspetto al WPC 2011, il 17 novembre 2011 alle 08:00
- PRISM comunicazione tra moduli, il 31 marzo 2009 alle 07:54
- Prism Region e View, il 19 marzo 2009 alle 23:07
- Composite Application Guidance (PRISM) primi passi, il 6 marzo 2009 alle 23:35
- Ottimizziamo le dimesioni del modulo (PRISM), l'8 marzo 2009 alle 17:13
- Blend ostaggio di WPF, il 30 luglio 2008 alle 15:26