PDA

View Full Version : DirctDraw con C++Builder 6


megawati
10-04-2012, 01:59
Ciao,

sto scrivendo un programmino di scacchi in C++Builder e ho il problema di disegnare (e far muovere, e scalare al volo) scacchiera e pezzi. Così a bruciapelo ho pensato subito alle DircetDraw, visto che sia TImage che le funzioni di draw della VCL sono troppo lente.

Solo che le DDraw non le ho mai usate e mi servono 2 tutorials: uno per le DDraw e uno per usarle dentro C++Builder :D

Scherzi a parte, qualcuno ha esperienza di DDraw in BCB6? Mi serve una manella... per non metterci un'eternità...

ESSE-EFFE
11-04-2012, 10:06
Così a bruciapelo ho pensato subito alle DircetDraw, visto che sia TImage che le funzioni di draw della VCL sono troppo lente.
Ma devi fare del rendering 3D? Altrimenti prima di complicare il tutto darei un'occhiata a come stai disegnando gli oggetti.

Solo che le DDraw non le ho mai usate e mi servono 2 tutorials: uno per le DDraw e uno per usarle dentro C++Builder
Tutorial generici in rete ne trovi diversi. In ambiente BCB, trovi degli esempi di utilizzo sotto la cartella Examples, creata durante l'installazione.

In alternativa valuta anche OpenGL, ma ripeto prima di tutto bisognerebbe capire quanto è complicato il rendering.

megawati
11-04-2012, 12:55
Ma devi fare del rendering 3D?

No, è tutto rigorosamente 2D. Sennò invece di DirectDraw chiedevo Direct3D :)

Ora che mi ci fai pensare, potrei usare il 3D anche per il 2D pensando (in un futuro) di aggiungere una modalità scacchiera 3D... senza contare che a quel punto tutta una serie di operazioni (scaling, antialiasing, ombre dei pezzi in movimento ecc.) sarebbero o automatiche o molto facili da implementare.

Ma di nuovo il BCB di suo non supporta niente di tutto ciò, né DDraw, né D3D, né OpenGL, per cui sono da capo a dodici :rolleyes:

Secondariamente, perché dovrei preferire OpenGL a Direct3D secondo te?
Parto da zero su entrambe, quindi la domanda non è banale... quale è migliore per uno che deve partire da zero col 3D? (e che non ci deve mica fare chissà cosa)?

ESSE-EFFE
11-04-2012, 13:29
No, è tutto rigorosamente 2D. Sennò invece di DirectDraw chiedevo Direct3D
Ecco, appunto. Ma allora torno a chiedere quali problemi stai avendo ora con VCL e/o GDI. Come stai disegnando i pezzi? Come li muovi? Cosa intendi per "scalare al volo"? Un po' di codice non guasterebbe...

Ma di nuovo il BCB di suo non supporta niente di tutto ciò, né DDraw, né D3D, né OpenGL
Ma allora io che ho scritto? BCB supporta tutte e tre quelle tecnologie e per DirectDraw ci sono degli esempi già inclusi nell'installazione. Molti altri si possono trovare in rete ovviamente.

megawati
11-04-2012, 15:57
Ecco, appunto. Ma allora torno a chiedere quali problemi stai avendo ora con VCL e/o GDI. Come stai disegnando i pezzi? Come li muovi? Cosa intendi per "scalare al volo"? Un po' di codice non guasterebbe...


Sto semplicemente cercando di spostare l'immagine 2D (la BMP) di un pezzo degli scacchi sopra un'altra BMP (la scacchiera) con il mouse. Il problema è che la VCL è troppo lenta per farlo al volo: ci ho provato con un approccio "naif", diciamo così, facendo spostare la bitmap del pezzo insieme al mouse, e sfarfalla. Mi servirebbe qualcosa che implementi degli sprite in VCL, ma non ho trovato niente al riguardo. Come componenti free, intendo.

Ma allora io che ho scritto? BCB supporta tutte e tre quelle tecnologie e per DirectDraw ci sono degli esempi già inclusi nell'installazione. Molti altri si possono trovare in rete ovviamente.

Mi sto documentando e le DDraw sono deprecate, adesso ci sono le Direct2D :rolleyes:
Comunque io per "supportato" pensavo a un componente tipo "TDDrawForm" o "TDDrawPanel" con metodi e proprietà, come tutti gli altri componenti VCL.

Lo so pure io che se mi scrivo il codice da me posso fare tutto con tutto, ma se possibile vorrei evitare di scriverlo, il codice... a me interessa scrivere un programma di scacchi, non una libreria grafica: quella semmai la prendo e la uso già pronta ;)

Comunque a forza di cercare ho trovato un componente TOpenGLPanel freeware, per cui mi sa che risolverò così :cool:

Grazie dell'aiuto :stordita:

ESSE-EFFE
11-04-2012, 16:17
Sto semplicemente cercando di spostare l'immagine 2D (la BMP) di un pezzo degli scacchi sopra un'altra BMP (la scacchiera) con il mouse. Il problema è che la VCL è troppo lenta per farlo al volo: ci ho provato con un approccio "naif", diciamo così, facendo spostare la bitmap del pezzo insieme al mouse, e sfarfalla.
In questo caso, ripeto, farebbe comodo (in primis a te) postare un po' di codice perchè quella che descrivi è un'operazione abbastanza semplice. Per cui, probabilmente, la stai facendo in maniera non corretta o non ottimizzata.

Pensare di passare ad OpenGL per questo problema mi pare eccessivo, poi fai tu eh...