Domanda

I sviluppando un semplice visualizzatore modello 3D su XNA 4.0. C'è un modo per evitare un ciclo gioco infinito con Disegnare e funzioni di aggiornamento? Ho bisogno di rendering della grafica 3D, ma senza rendere infinito di scena. Voglio dire, ho bisogno di ridisegnare la scena solo allora è davvero cambiato.

È stato utile?

Soluzione

suggerisco di dare un'occhiata a come stanno facendo nei loro campioni:

App Hub - WinForms Serie 1
App Hub - WinForms Serie 2

Altri suggerimenti

Perché vuoi esattamente questo?

Se si utilizza un'applicazione WinForms avere un maggiore controllo sul proprio aggiornamento e disegnare ciclo, ma si potrebbe anche rendere la scena per una texture prima, e poi interrompere il rendering a tutti.

Si sta andando ad avere per rotolare il proprio ciclo multi-threaded; se si stallo sia Update o Draw l'altro otterrà in fase di stallo anche. Un'altra considerazione è che se la vostra finestra viene oscurato in qualche modo (in ambienti non DWM, una finestra di sovrapposizione per esempio) stallo il Draw lascerà i settori della vostra finestra non verniciato

.

Se si vuole andare avanti con questo; ciò che si farà è avviare una Thread la prima volta viene chiamato Update e successivamente utilizzare un ManualResetEvent per sincronizzare i due.

Una soluzione molto più robusto è quello di rendere l'intera scena per un RenderTarget2D quando la scena viene aggiornato; se la scena non è stato alterato dall'ultimo richiamo Update o Draw semplicemente rendere il RenderTarget2D invece di tutta la scena. Questo è ancora un ciclo infinito, ma tende verso il vostro requisito (anche se non soddisfa esso).

Questo tipo di scenario potrebbe essere meglio risolto utilizzando WinForms o WPF come host per il sistema di rendering. Ho lavorato con tali sistemi prima e ho trovato utilizzando SlimDX WPF Interop era il mio preferito soluzione. Usando questo approccio consente l'aggiunta di bella interfaccia utente funzionalità fornite da WPF, sovrapposta su un modello 3D rendering ad una superficie.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top