2010-07-12 12 views
5

Ho usato DirectDraw in C e C++ anni fa per disegnare alcuni semplici grafici 2D. Ero abituato alla procedura di creazione di una superficie, scrivendovi puntatori, girando il buffer posteriore, memorizzando gli sprite su superfici fuori schermo e così via. Quindi oggi se voglio scrivere alcuni programmi di grafica 2D in C o C++, qual è la strada da percorrere?Programmazione grafica 2D semplice

  1. sarà questo stesso metodo di programmazione ancora applicare o devo avere una diversa comprensione di astrazione hardware video?
  2. Quali librerie e strumenti sono disponibili su Windows e Linux?
+1

OpenGL è la risposta immediata più ovvia. È potente con una curva di apprendimento bassa per applicazioni semplici. – Akusete

risposta

3

Quali librerie e strumenti sono disponibili su Windows e Linux?

SDL, OpenGL, e Qt 4 (è libreria GUI, ma è abbastanza veloce/flessibile per il rendering 2D)

Sarà questo stesso metodo di programmazione si applicano ancora o devo avere una diversa comprensione dell'astrazione dell'hardware video?

Normalmente non si scrivono i dati in superficie "utilizzando i puntatori" ogni fotogramma e invece li si manipola/disegna utilizzando i metodi forniti dall'API. Questo perché il driver funzionerà più velocemente con la memoria video che se trasferisci i dati dalla memoria di sistema alla memoria video ogni fotogramma. È ancora possibile scrivere dati in superficie/trama hardware (anche durante ogni fotogramma), se necessario, ma è possibile che tali superfici debbano essere trattate in modo speciale per ottenere prestazioni ottimali. Ad esempio, in DirectX dovresti dire al conducente che i dati di superficie cambieranno frequentemente e che dovrai solo scrivere i dati in superficie, senza leggerli mai. Inoltre, in 3D-oriented API (openGL/DirectX) la superficie di rendering sull'altra superficie è un po '"caso speciale" e potrebbe essere necessario utilizzare "Render Targets" (DirectX) o "Framebuffer Objects" (OpenGL). Che è diverso da DirectDraw (dove, AFAIK, si può usare qualsiasi cosa su qualsiasi cosa). La cosa buona è che con l'API 3D si ottiene un modo incredibilmente flessibile di trattare superfici/trame - allungando, ruotando, colorandole con il colore, mescolandole insieme, elaborandole usando shader può essere fatto su hardware.

Un'altra cosa è che le moderne apis 3D con supporto hardware spesso non funzionano su trame a 8 bit e preferiscono le immagini ARGB. Le superfici a 8 bit con tavolozza possono essere emulate, se necessario, e forniscono apis 2D a basso livello (SDL, DirectDraw). Inoltre puoi emulare texture a 8 bit su hardware usando shader di frammenti/pixel.

In ogni caso, se si desidera utilizzare la "vecchia scuola" per utilizzare le superfici in modo multipiattaforma (ad esempio "scrivere i dati su ogni fotogramma utilizzando i puntatori" - cioè è necessario un renderer software o qualcosa del genere), SDL lo consente facilmente. Se vuoi operazioni di livello superiore e più flessibili, Qt 4 e OpenGL sono per te.

2

Su Linux è possibile utilizzare OpenGL, non solo è utilizzato per il supporto 3D ma supporta anche 2D.

1

SDL è anche abbastanza facile da usare, fuori dalla scatola. È anche multipiattaforma e include (e ha un sacco di) plugin disponibili per gestire le tue esigenze. Si interfaccia bene anche con openGL se dovessi aver bisogno del supporto 3D.

Problemi correlati