Domanda

C'è un altro modo per eseguire il rendering di grafica in C# oltre GDI+ e XNA?

(Per lo sviluppo di un tile map editor.)

È stato utile?

Soluzione

SDL.NET è la soluzione che ho imparato ad amare.Se avete bisogno di 3D su di esso, è possibile utilizzare Tao.OpenGL per il rendering all'interno di esso.E ' veloce, standard del settore (SDL, che è), e cross-platform.

Altri suggerimenti

Sì, ho scritto un controllo Windows Form che avvolge DirectX 9.0 e diretto a livello di pixel manipolazione del video di superficie.

In realtà ho scritto un altro post su Stack Overflow, chiedendo se ci sono altri approcci: Unsafe C# e puntatori per il rendering 2D, buona o cattiva?

Mentre è relativamente alte prestazioni, è necessario che il pericoloso opzione del compilatore, in quanto utilizza i puntatori per accedere alla memoria in modo efficiente.Ecco il motivo di questo post precedente.

Questo è un alto livello di tutti i passaggi necessari:

  1. Scaricare l'SDK di DirectX.
  2. Creare un nuovo C# Windows Form progetto di riferimento e installato Microsoft DirectX assemblea.
  3. Inizializzare un nuovo Dispositivo DirectX oggetto con la Presentazione di Parametri (finestrato, back buffer, etc.) si richiedono.
  4. Creare il Dispositivo, avendo cura di registrare la superficie "Pitch" e modalità di visualizzazione corrente (bit per pixel).
  5. Quando si ha bisogno di mostrare qualcosa, Lock il backbuffer superficie e memorizzare il puntatore restituito l'inizio di superficie memoria.
  6. L'uso di aritmetica dei puntatori, calcolare l'attuale posizione in pixel nel dati in base alla superficie di passo, bits per pixel e l'effettivo x/y coordinate in pixel.
  7. Nel mio caso, per semplicità, mi sto appoggiando a 32 bpp, il che significa l'impostazione di un pixel è molto semplice:*(surfacePointer + (y * pitch + x))=Color.FromARGB(255,0,0);
  8. Quando ha finito di disegnare, Unlock il back buffer di superficie.Presente superficie.
  9. Ripetere dal punto 5, come richiesto.

Essere consapevoli del fatto che l'assunzione di questo approccio è necessario essere molto attenti a controllare la modalità di visualizzazione corrente (pitch e bit per pxiel) della superficie di destinazione.Inoltre, è necessario avere una strategia in atto per affrontare con il ridimensionamento della finestra o cambiamenti di formato dello schermo, mentre il programma è in esecuzione.

  • Managed DirectX Di Microsoft.DirectX spazio dei nomi) per la grafica 3D più veloce.Si tratta di un solido .NET wrapper su DirectX API, che viene fornito con un po ' di calo di prestazioni per la creazione .NET oggetti e smistamento.A meno che non si sta scrivendo un completo moderno motore 3D, funziona benissimo.

  • Finestra Presentation Foundation (WPF) (di Windows.Media namespace) - la scelta migliore per la grafica 2D.Ha anche limitato 3D abilità.Ha l'obiettivo di sostituire Windows Form con il vettore accelerazione hardware indipendente dalla risoluzione del quadro.Molto comodo, supporta diversi sapori di controlli personalizzati, di risorse, di associazione dati, eventi e comandi...ha anche qualche WTFs.La velocità è di solito più veloce di GDI e più lento rispetto a DirectX, e dipende molto da come si fanno le cose (visto qualcosa su cui lavorare 60 volte più veloce dopo la riscrittura in un modo sensato).Abbiamo avuto un successo di attuazione 3 1280x1024 schermate piene di indicatori in tempo reale, grafici e grafici su un singolo (e non il migliore) del PC.

Si potrebbe provare a guardare in WPF, utilizzo di Visual Studio e/o Expression Blend.Non sono sicuro di come sofisticati si sta cercando di ottenere, ma si dovrebbe essere in grado di gestire un semplice editor.Check out questo Articolo di MSDN per ulteriori info.

Si potrebbe guardare in Cairo libreria grafica.Il Mono il progetto ha le associazioni per C#.

Cairo è un'opzione.Attualmente sto riscrivendo il mio software di mappatura utilizzando GDI+ e il Cairo.Ha un tile map generator, tra le altre caratteristiche.

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