un primo passo nel mondo 3d

di Marco Leoncini, in work in progress,

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 :)

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese