PDA

View Full Version : OpenGl o Directx [dal programmatore]


Futuregames
14-03-2005, 21:29
Io sono preposizionato a favore di opengl ma volevo chiedervi questa sfida da questi punti di vista:

-qual'è più richiesto da software house ecc

-quale vale di più se un programmatore cerca lavoro

-difficolta

-difficolta e/o facilita di trovare materiale per imparare o uno o l'altro

-potenza degli engine



grazie

fek
14-03-2005, 22:14
Originariamente inviato da Futuregames
Io sono preposizionato a favore di opengl ma volevo chiedervi questa sfida da questi punti di vista:

-qual'è più richiesto da software house ecc

-quale vale di più se un programmatore cerca lavoro

-difficolta

-difficolta e/o facilita di trovare materiale per imparare o uno o l'altro

-potenza degli engine



grazie

-qual'è più richiesto da software house ecc

DirectX

-quale vale di più se un programmatore cerca lavoro

DirectX

-difficolta

DirectX

-difficolta e/o facilita di trovare materiale per imparare o uno o l'altro

DirectX

-potenza degli engine

Puoi spiegare meglio la domanda?

beppegrillo
14-03-2005, 22:26
fek, visto che ho capito che lavori come programmatore in ambito videoludico. Posso chiederti quanto tempo hai impiegato per specializzarti in quell'ambito? E' necessario avere conoscenze anche di grafica 3d, oppure quello è un lavoro prettamente dei grafici?
Hai seguito qualche corso in particolare oppure hai fatto tutto da solo?
Grazie ;)

MSciglio
14-03-2005, 22:32
-qual'è più richiesto da software house ecc
-quale vale di più se un programmatore cerca lavoro

Attualmente senza ombra di dubbio DirectX.
In futuro OpenGL potrebbe prendere piede dato che per la PS3 sembra che verrà usato.
Ma con DirectX vai comunque sul sicuro dato che per PC e XBox2 si useranno le DirectX.

-difficolta
-difficolta e/o facilita di trovare materiale per imparare o uno o l'altro

La difficoltà dipende dal tuo stile di programmazione. Se sei C-oriented allora forse OpenGL può risultare un tantino più semplice. Viceversa se sei più orientato al C++ DirectX sono più immediate.
Ad ogni modo la difficoltà nell'imparare entrambe le API e trovare informazioni a riguardo è molto simile.

-potenza degli engine
Potenza dei programmatori. Attualmente DirectX è più apprezzato nel settore.

Futuregames
15-03-2005, 06:39
male w opensource ma qua si va a rilento:)

fek
15-03-2005, 10:17
Originariamente inviato da beppegrillo
fek, visto che ho capito che lavori come programmatore in ambito videoludico. Posso chiederti quanto tempo hai impiegato per specializzarti in quell'ambito? E' necessario avere conoscenze anche di grafica 3d, oppure quello è un lavoro prettamente dei grafici?
Hai seguito qualche corso in particolare oppure hai fatto tutto da solo?
Grazie ;)

Non e' strettamente necessario avere conoscenze di modellazione e uso di pacchetti di grafica, ma aiuta molto, tanto che adesso sto cercando di imparare a usare sia 3D Studio Max sia Photoshop. Capire come pensano e lavorano i grafici e' spesso molto importante per dare loro un effetto che possano usare in maniera intuitiva con gli strumenti a loro disposizione, ben sapendo che un grafico non e' un programmatore.

Non ho seguito alcun corso (e non penso che quelli in Italia siano troppo utili), mi sono messo a spulciare tutta la documentazione che trovavo e lo faccio tutt'ora. E poi ho provato per conto mio.

fek
15-03-2005, 10:28
Originariamente inviato da Futuregames
male w opensource ma qua si va a rilento:)

Se vuoi diventare un programmatore professionista in generale, ed un programmatore 3d in particolare, devi dimenticarti le guerre di religione ed essere il piu' possibile pragmatico. Niente "w opensource", "w closed source", "abbasso directx viva opengl" per intenderci.
Devi usare lo strumento piu' adatto possibile per risolvere il problema che stai affrontando ignorando che questo strumento possa essere open o closed source, di microsoft o di sony.
Hai un problema, lo devi risolvere.

Nel caso in particolare il problema e' scrivere un motore 3d per un videogioco, presumo dalla tua domanda che la piattaforma sia il PC.
Su PC lo strumento piu' adatto per risolvere questo problema sono le DirectX (Direct3D), per svariati motivi, che ti elenco qui. Se poi vuoi possiamo entrare piu' nel dettaglio per ogni motivo in seguito.

- Facilita' d'uso. L'API e' piu' semplificata rispetto a OGL, non esistono le estensioni a complicare la situazione, il debug runtime fornisce molte informazioni sulle condizioni di errore, che semplifica molto lo sviluppo

- Supporto. Esistono molti strumenti d'appoggio e molto codice gia' scritto per Direct3D, MS fornisce un ottimo supporto al programmatore in caso di problemi (bug, comportamenti non intuitivi dell'API)

- Informazioni. La maggior parte dei libri e degli articoli sul rendering in tempo reale presuppongono la conoscenza delle D3D e riportano esempi con questa API; gli articoli di stampo universitario, invece, tendono ad essere in OpenGL

- Standard di fatto. Si spiega da solo: le D3D sono lo standard di fatto nell'industry, HLSL e' diventato lo standard di fatto per scrivere gli shader in tempo reale

(ciao Maurizio :))

MSciglio
15-03-2005, 13:13
Originariamente inviato da fek
Non e' strettamente necessario avere conoscenze di modellazione e uso di pacchetti di grafica, ma aiuta molto, tanto che adesso sto cercando di imparare a usare sia 3D Studio Max sia Photoshop. Capire come pensano e lavorano i grafici e' spesso molto importante per dare loro un effetto che possano usare in maniera intuitiva con gli strumenti a loro disposizione, ben sapendo che un grafico non e' un programmatore.


Assolutamente d'accordo. Il lavoro del programmatore grafico e' al confine tra la programmazione e la grafica. E' estremamente utile essere in grado di ragionare con la testa di un grafico per cui avere una conoscenza seppur ovviamente non approfondita dei pacchetti usati dai grafici e' molto importante.

Originariamente inviato da fek
Non ho seguito alcun corso (e non penso che quelli in Italia siano troppo utili), mi sono messo a spulciare tutta la documentazione che trovavo e lo faccio tutt'ora. E poi ho provato per conto mio.

Ancora piu' d'accordo :D
Evitate i corsi a pagamento ma chiudetevi piuttosto a casa a studiare. I soldi meglio spesi sono quelli per i libri.

Futuregames
15-03-2005, 13:36
quindi meglio fare in directx voi dite... è tanto difficile fare un motore grafico da 0 (3d si intende)?

ce ne sono già + o - fatti? come irrlitch?

fek
15-03-2005, 14:18
Originariamente inviato da Futuregames
quindi meglio fare in directx voi dite... è tanto difficile fare un motore grafico da 0 (3d si intende)?

ce ne sono già + o - fatti? come irrlitch?

Dipende dal motore 3d, non e' comunque una passeggiata di salute :)

In giro ci sono un po' di motori 3d open source dai quali prendere spunto, ma e' un po' che non ne guardo.

MSciglio
15-03-2005, 14:54
Originariamente inviato da Futuregames
quindi meglio fare in directx voi dite... è tanto difficile fare un motore grafico da 0 (3d si intende)?

ce ne sono già + o - fatti? come irrlitch?

Lascia stare l'idea di fare un engine :)

Il migliore open-source sembra essere Ogre:
http://www.ogre3d.org

71104
15-03-2005, 15:29
comunque vorrei precisare che DirectX e OpenGL non sono la stessa cosa: DirectX non è un motore grafico, è una mega-libreria per lo sviluppo di giochi, 3D e non; DirectX aiuta non solo nella grafica 3D (grazie a Direct3D) ma anche ad esempio nella grafica ad alta velocità (DirectDraw, perfettamente integrato con la GDI e tutto in kernel mode ;)), nella sintesi del suono (DirectSound), nel gaming online, nella gestione delle periferiche di gioco (di questi ultimi due non ricordo i nomi :D) e così via; OpenGL invece è solo un motore di grafica tridimensionale, paragonabile al singolo Direct3D, non a tutto DirectX.
il mio parere si attiene alla filosofia "the right tool for the right job": per fare 2 esempi, se devi creare un videogioco devi sicuramente usare DirectX, mentre se devi creare un editor di grafica tridimensionale devi sicuramente usare OpenGL!
e a proposito, la documentazione di entrambi sta tutta su MSDN, di tutto di più, reference e tutorials, più de così se more :p quindi è anche ovvio che la reperibilità di documentazione è la stessa :p
ciao

71104
15-03-2005, 15:34
e a proposito dello sviluppo di un motore grafico da 0: se te intendi di sviluppo dei drivers e di programmi che girano in kernel mode è abbastanza facile, altrimenti è completamente al di fuori delle tue capacità ed è meglio che lasci perdere ;) tanto che t'importa, DirectX e OpenGL fanno di tutto, e anche di più ;)

71104
15-03-2005, 15:39
ah, ultimissima cosa :p OpenGL IMHO è moooooooooolto più facile di DirectX, è una cavolata, perché la fase di inizializzazione è sempre la stessa, basta che fai copia-incolla dall'esempio che trovi in MSDN (con "inizializzazione" mi riferisco al settaggio della struttura PIXELFORMATDESCRIPTOR), dopodiché gli passi tutti i comandi che ti pare e lui esegue, più semplice di così... sono ben poche lo conoscenze di base richieste rispetto a quelle richieste per l'uso di DirectX (COM, capirai, ci vuole 1 secolo solo per imparare quello...), però rimango sempre fondamentalmente del parere "the right tool for the right job": se devi creare un videogioco, COM o no devi morire :D usa DirectX ;)
ciao

fek
15-03-2005, 15:45
Originariamente inviato da 71104
ah, ultimissima cosa :p OpenGL IMHO è moooooooooolto più facile di DirectX, è una cavolata, perché la fase di inizializzazione è sempre la stessa, basta che fai copia-incolla dall'esempio che trovi in MSDN (con "inizializzazione" mi riferisco al settaggio della struttura PIXELFORMATDESCRIPTOR), dopodiché gli passi tutti i comandi che ti pare e lui esegue, più semplice di così... sono ben poche lo conoscenze di base richieste rispetto a quelle richieste per l'uso di DirectX (COM, capirai, ci vuole 1 secolo solo per imparare quello...), però rimango sempre fondamentalmente del parere "the right tool for the right job": se devi creare un videogioco, COM o no devi morire :D usa DirectX ;)
ciao

Non c'e' alcun bisogno di conoscere i fondamenti di COM per un uso normale delle Direct3D.
L'inizializzazione base delle Direct3D e' altrettanto semplice di quella delle OpenGL.

fek
15-03-2005, 15:48
Originariamente inviato da MSciglio
Lascia stare l'idea di fare un engine :)

Il migliore open-source sembra essere Ogre:
http://www.ogre3d.org

Dai, non stenderlo cosi' :)

Da qualche parte si deve pur iniziare, io gli direi di provarci tranquillamente e di prepararsi a buttare via almeno i primi tre progetti ed un paio d'anni di lavoro.

MSciglio
15-03-2005, 16:17
Originariamente inviato da 71104
comunque vorrei precisare che DirectX e OpenGL non sono la stessa cosa: DirectX non è un motore grafico, è una mega-libreria per lo sviluppo di giochi, 3D e non; DirectX aiuta non solo nella grafica 3D (grazie a Direct3D) ma anche ad esempio nella grafica ad alta velocità (DirectDraw, perfettamente integrato con la GDI e tutto in kernel mode ;)), nella sintesi del suono (DirectSound), nel gaming online, nella gestione delle periferiche di gioco (di questi ultimi due non ricordo i nomi :D) e così via; OpenGL invece è solo un motore di grafica tridimensionale, paragonabile al singolo Direct3D, non a tutto DirectX.
il mio parere si attiene alla filosofia "the right tool for the right job": per fare 2 esempi, se devi creare un videogioco devi sicuramente usare DirectX, mentre se devi creare un editor di grafica tridimensionale devi sicuramente usare OpenGL!
e a proposito, la documentazione di entrambi sta tutta su MSDN, di tutto di più, reference e tutorials, più de così se more :p quindi è anche ovvio che la reperibilità di documentazione è la stessa :p
ciao

Hai detto diverse inesattezze. Intanto sia OpenGL che DirectX sono delle API il cui scopo ultimo e' disegnare triangoli sullo schermo in maniera efficiente. Entrambe sono bel lungi dall'essere engine.
E' vero che DirectX oltre alle DirectGraphics offrono altre funzionalita' (immagino ti riferisca al modulo D3DX). E' anche vero che queste in generale non vengono usate nello sviluppo di un progetto di grosse dimensioni.

Non sono affatto d'accordo con te quando dici che per un gioco DEVI scegliere DX mentre per un editor DEVI scegliere OGL. Entrambe servono alle stesse cose e la scelta e' a discrezione dello sviluppatore. Il dominio applicativo e' esattamente lo stesso.

fek
15-03-2005, 16:23
Originariamente inviato da MSciglio
E' vero che DirectX oltre alle DirectGraphics offrono altre funzionalita' (immagino ti riferisca al modulo D3DX). E' anche vero che queste in generale non vengono usate nello sviluppo di un progetto di grosse dimensioni.


Oddio, uso D3DX in maniera piuttosto massiccia e ne sentirei davvero la mancanza in OpenGL.

MSciglio
15-03-2005, 16:24
Originariamente inviato da fek
Dai, non stenderlo cosi' :)

Da qualche parte si deve pur iniziare, io gli direi di provarci tranquillamente e di prepararsi a buttare via almeno i primi tre progetti ed un paio d'anni di lavoro.

E' il classico errore che fanno tutti. Vogliono correre prima di camminare :)
Prima fa ruotare un cubo, poi si studia un engine gia' pronto (nel frattempo e' passato circa un anno :D ) e alla fine prova con l'engine :D

fek
15-03-2005, 16:25
Originariamente inviato da MSciglio
E' il classico errore che fanno tutti. Vogliono correre prima di camminare :)
Prima fa ruotare un cubo, poi si studia un engine gia' pronto (nel frattempo e' passato circa un anno :D ) e alla fine prova con l'engine :D

Ah si', certo. Deve prima iniziare dal cubo come tutti.
Ma dal cubo in poi la strada e' in discesa :D

MSciglio
15-03-2005, 16:28
Originariamente inviato da fek
Oddio, uso D3DX in maniera piuttosto massiccia e ne sentirei davvero la mancanza in OpenGL.

Cosa usi? Ovviamente le funzioni relative agli shaders le uso anche io.

fek
15-03-2005, 16:45
Originariamente inviato da MSciglio
Cosa usi? Ovviamente le funzioni relative agli shaders le uso anche io.

Ovviamente tutte le funzioni matematiche di cui mi capita aver bisogno.
Poi l'effect framework senza il quale la vita non ha senso essere vissuta, e in OGL bisogna scriverselo (a meno di non usare CgFX).
Ho usato la generazione dei LOD automatica, il simulatore di PRT, varie funzioni per la gestione delle texture. In genere prima di scrivere qualcosa controllo che non sia gia' stata implementata nelle D3DX.

MSciglio
15-03-2005, 16:56
Originariamente inviato da fek
Ovviamente tutte le funzioni matematiche di cui mi capita aver bisogno.
Poi l'effect framework senza il quale la vita non ha senso essere vissuta, e in OGL bisogna scriverselo (a meno di non usare CgFX).
Ho usato la generazione dei LOD automatica, il simulatore di PRT, varie funzioni per la gestione delle texture. In genere prima di scrivere qualcosa controllo che non sia gia' stata implementata nelle D3DX.

Stai parlando di quello che fai nel tempo libero o nel gioco? :)
Per fare miei esperiementi e prototipi anche io uso pesantemente D3DX. Mi riferivo al gioco.

fek
15-03-2005, 17:03
Originariamente inviato da MSciglio
Stai parlando di quello che fai nel tempo libero o nel gioco? :)
Per fare miei esperiementi e prototipi anche io uso pesantemente D3DX. Mi riferivo al gioco.

Gioco. E chi ha piu' tempo libero per i prototipi? :(

Il sistema di materiali ad esempio l'ho pesantemente basato sull'effect framework, fino a linkare frammenti di effetti al volo, ricaricarli quando modifico il codice di uno shader. Fare la stessa cosa senza l'effect framework mi avrebbe portato via una marea di tempo, beh, mi porto' via qualcosa tipo 3/4 mesi quando ci lavorai qualche anno fa.

MSciglio
15-03-2005, 17:50
Originariamente inviato da fek
Gioco. E chi ha piu' tempo libero per i prototipi? :(

Il sistema di materiali ad esempio l'ho pesantemente basato sull'effect framework, fino a linkare frammenti di effetti al volo, ricaricarli quando modifico il codice di uno shader. Fare la stessa cosa senza l'effect framework mi avrebbe portato via una marea di tempo, beh, mi porto' via qualcosa tipo 3/4 mesi quando ci lavorai qualche anno fa.

Approccio ormai diventato un classico :)
E' la prima volta che sento dire che l'effect framework viene usato per un gioco grosso. Come vi siete trovati? E' una leggenda il famoso overhead di cui si parla?

fek
15-03-2005, 17:54
Originariamente inviato da MSciglio
Approccio ormai diventato un classico :)
E' la prima volta che sento dire che l'effect framework viene usato per un gioco grosso. Come vi siete trovati? E' una leggenda il famoso overhead di cui si parla?

Si', ormai il fragment linking e' una moda, nulla di particolarmente innovativo :)

Mi sono trovato benissimo con l'effect framework. L'overhead esiste, o meglio esisteva. Le ultime versioni sono state migliorate molto, basta saperlo usare e non e' piu' lento che fare la stessa cosa a mano, ma si risparmia talmente tanto tempo che il gioco vale ampiamente la candela.

Da mesi ormai non appare piu' alcuna funzione associata all'effect framework nei profiling.

MSciglio
15-03-2005, 18:14
Originariamente inviato da fek
Si', ormai il fragment linking e' una moda, nulla di particolarmente innovativo :)

Mi sono trovato benissimo con l'effect framework. L'overhead esiste, o meglio esisteva. Le ultime versioni sono state migliorate molto, basta saperlo usare e non e' piu' lento che fare la stessa cosa a mano, ma si risparmia talmente tanto tempo che il gioco vale ampiamente la candela.

Da mesi ormai non appare piu' alcuna funzione associata all'effect framework nei profiling.

Immaginavo. Hanno sistemato molte cose relative al cambio di stati. Effettivamente e' molto comodo il framework dovendo sviluppare solo su pc (e forse xbox2?).

Futuregames
15-03-2005, 19:30
asp asp io con motore grafico intendo il motore grafico per un gioco che faccio io nn per altri.. nn so come si chiama forse ho sbagliato


ricapitolando mi avete convinto a directxare

ora vi chiedo dove si possono trovare in rete delle guide di base (da visual c++ se si fa con quello e come inizializzare tutto)

inzomma su visual c++ (ho .net 2003) si fa nuovo progetto/console o cosa?

MSciglio
15-03-2005, 20:47
Originariamente inviato da Futuregames
asp asp io con motore grafico intendo il motore grafico per un gioco che faccio io nn per altri.. nn so come si chiama forse ho sbagliato


ricapitolando mi avete convinto a directxare

ora vi chiedo dove si possono trovare in rete delle guide di base (da visual c++ se si fa con quello e come inizializzare tutto)

inzomma su visual c++ (ho .net 2003) si fa nuovo progetto/console o cosa?

Prima di pensare al resto devi imparare bene il C++.
Per imparare il Visual C++ (non il linguaggio ma solo l'ambiente di sviluppo) puoi usare libri tipo Teach Yourself Visual C++ o simili.
Se ancora devi iniziare non pensare agli engine.

Futuregames
15-03-2005, 21:39
Originariamente inviato da MSciglio
Prima di pensare al resto devi imparare bene il C++.
Per imparare il Visual C++ (non il linguaggio ma solo l'ambiente di sviluppo) puoi usare libri tipo Teach Yourself Visual C++ o simili.
Se ancora devi iniziare non pensare agli engine.


io so il c solo gli oggetti mi mancano e li devo iniziare ancora ma credo che con directx li imparo;)

MSciglio
15-03-2005, 22:13
Originariamente inviato da Futuregames
io so il c solo gli oggetti mi mancano e li devo iniziare ancora ma credo che con directx li imparo;)

Mi sa che stai sottovalutando il C++ :D

gokan
15-03-2005, 22:35
Ciao Cthulhu :D
Mi fa piacere che sei iscritto anche a questo forum!!
Cosa ne pensi delle librerie Allegro,SDL o simili come inizio nella programmazione dei videogiochi?
Ciao

MSciglio
15-03-2005, 23:15
Originariamente inviato da gokan
Ciao Cthulhu :D
Mi fa piacere che sei iscritto anche a questo forum!!
Cosa ne pensi delle librerie Allegro,SDL o simili come inizio nella programmazione dei videogiochi?
Ciao

Ciao gokan,

Non ho mai usato Allegro o SDL ma credo siano delle ottime API per iniziare. In particolare di SDL se ne parla molto bene sopratutto per il 2D.
La cosa più importante quando si comincia è non porsi obiettivi ragionevolmente impossibili da raggiungere (vedi engine) perchè va a finire che non appena si intravedono le prime difficoltà si abbandona tutto. SDL o Allegro possono essere utili per "iniziare a camminare".

71104
16-03-2005, 00:25
Originariamente inviato da fek
Non c'e' alcun bisogno di conoscere i fondamenti di COM per un uso normale delle Direct3D.
L'inizializzazione base delle Direct3D e' altrettanto semplice di quella delle OpenGL.
BBBBBEEE'... se usi DirectX senza conoscere COM il risultato più probabile è un leak mostruoso, non un software!!! :D :sofico:

71104
16-03-2005, 00:32
Originariamente inviato da MSciglio
Hai detto diverse inesattezze.

non è vero! :mad:


Intanto sia OpenGL che DirectX sono delle API

embe'? io che ho detto di diverso?


il cui scopo ultimo e' disegnare triangoli sullo schermo in maniera efficiente. Entrambe sono bel lungi dall'essere engine.

ma non ho mai chiamato "engine" nessuno dei due, e cmq "engine" è un termine molto generico, se volessi potrei anche chiamarli "engine", tutti e due! ;)


E' vero che DirectX oltre alle DirectGraphics offrono altre funzionalita' (immagino ti riferisca al modulo D3DX). E' anche vero che queste in generale non vengono usate nello sviluppo di un progetto di grosse dimensioni.

immagino che D3DX si riferisca alle Direct3D, cmq non capisco come mai secondo te le DirectX non vengono usate in grossi progetti; forse mi sbaglio, ma mi sembra che NFSU le usi (ripeto: potrei sbagliarmi, non sono sicuro), e NFSU è grosso eccome; è il mio gioco preferito!!! :sofico:
non vedo quali limitazioni potrebbero mai avere le DirectX in progetti di grosse dimensioni.


Non sono affatto d'accordo con te quando dici che per un gioco DEVI scegliere DX mentre per un editor DEVI scegliere OGL. Entrambe servono alle stesse cose e la scelta e' a discrezione dello sviluppatore. Il dominio applicativo e' esattamente lo stesso.
sicuramente il programmatore può scegliere quello che gli pare per fare quello che gli pare; esistono tanti bellissimi giochi (leggasi Doom III :p) che usano le OpenGL, nessuno ti obbliga a scrivere giochi in DirectX. In genere però possiamo dire che le OpenGL sono più mirate alla renderizzazione di immagini di qualità, mentre:
1) le DirectX sono delle librerie progettate in maniera estremamente specifica per il supporto di videogiochi
2) le DirectDraw e Direct3D mirano specificamente a realizzare grafica ad alta velocità; infatti tutto il baraccone gira quasi completamente in kernel mode.

MSciglio
16-03-2005, 00:56
Originariamente inviato da 71104

embe'? io che ho detto di diverso?


ma non ho mai chiamato "engine" nessuno dei due, e cmq "engine" è un termine molto generico, se volessi potrei anche chiamarli "engine", tutti e due! ;)



Volendo fare i pignoli hai definito OpenGL "un motore di grafica tridimensionale" ;)
Engine è generico quanto vuoi ma si intende qualcosa di ben più complesso di una libreria di rasterizzazione di triangoli.

Originariamente inviato da 71104
immagino che D3DX si riferisca alle Direct3D, cmq non capisco come mai secondo te le DirectX non vengono usate in grossi progetti; forse mi sbaglio, ma mi sembra che NFSU le usi (ripeto: potrei sbagliarmi, non sono sicuro), e NFSU è grosso eccome; è il mio gioco preferito!!! :sofico:
non vedo quali limitazioni potrebbero mai avere le DirectX in progetti di grosse dimensioni.


Hai capito male. D3DX è un modulo delle DirectGraphics (non si chiamano più Direct3D) che fornisce tante comode funzioni.
DirectX sono di gran lunga le API più utilizzate attualmente. Io mi riferivo solamente al modulo D3DX.

Originariamente inviato da 71104
sicuramente il programmatore può scegliere quello che gli pare per fare quello che gli pare; esistono tanti bellissimi giochi (leggasi Doom III :p) che usano le OpenGL, nessuno ti obbliga a scrivere giochi in DirectX. In genere però possiamo dire che le OpenGL sono più mirate alla renderizzazione di immagini di qualità, mentre le DirectX:
1) sono delle librerie progettate in maniera estremamente specifica per il supporto di videogiochi
2) mirano specificamente a realizzare grafica ad alta velocità; infatti tutto il baraccone gira quasi completamente in kernel mode.

Dal punto di vista della qualità visiva non c'è alcuna differenza. Puoi renderizzare "immagini di qualità" sia con DX che con OGL. Come ho già detto hanno gli stessi medesimi obiettivi.

I motivi per cui DX vengono scelte per la maggior parte dei giochi li ha già spiegati Fek sopra. Nota che nemmeno lui ha menzionato velocità o qualità.

fek
16-03-2005, 11:00
Originariamente inviato da 71104
BBBBBEEE'... se usi DirectX senza conoscere COM il risultato più probabile è un leak mostruoso, non un software!!! :D :sofico:

Il Debug runtime delle D3D ti avverte di ogni oggetto che dimentichi di rilasciare. Quindi basta semplicemente seguire gli esempi dei doc.

fek
16-03-2005, 11:04
Originariamente inviato da MSciglio
Dal punto di vista della qualità visiva non c'è alcuna differenza. Puoi renderizzare "immagini di qualità" sia con DX che con OGL. Come ho già detto hanno gli stessi medesimi obiettivi.

I motivi per cui DX vengono scelte per la maggior parte dei giochi li ha già spiegati Fek sopra. Nota che nemmeno lui ha menzionato velocità o qualità.

Esatto, dal punto di vista qualitativo un triangolo rasterizzato via OpenGL o Direct3D (lo so, mi ostino a chiamarle D3D :p) fornisce gli stessi pixel dello stesso colore su schermo in entrambi i casi; ignoro qui alcune differenze nella definizione delle coordinate delle texture nelle due API.

Volendo essere il piu' possibile esaustivi, le OpenGL sono leggermente piu' efficienti in diverse situazioni, soprattutto nel renderizzare gruppi di pochi triangoli.

71104
16-03-2005, 13:53
Originariamente inviato da MSciglio
Volendo fare i pignoli hai definito OpenGL "un motore di grafica tridimensionale" ;)
Engine è generico quanto vuoi ma si intende qualcosa di ben più complesso di una libreria di rasterizzazione di triangoli.

allora però mi devi dire che è un "motore di grafica tridimensionale"... con quell'espressione io intendo semplicemente una parte di software che mi supporti nella renderizzazione di immagini 3D sfruttando l'eventuale supporto hardware, come fanno OpenGL e Direct3D (o DirectGraphics che siano). tu invece che intendi?


Hai capito male. D3DX è un modulo delle DirectGraphics (non si chiamano più Direct3D) che fornisce tante comode funzioni.
DirectX sono di gran lunga le API più utilizzate attualmente. Io mi riferivo solamente al modulo D3DX.

di questo non ero al corrente :p ora so 1 cosa in +! :)
cmq: non so esattamente cosa faccia questo D3DX, ma le vecchie Direct3D sono esattamente quello che io definisco "motore di grafica 3D"


Dal punto di vista della qualità visiva non c'è alcuna differenza. Puoi renderizzare "immagini di qualità" sia con DX che con OGL. Come ho già detto hanno gli stessi medesimi obiettivi.

OK!!! va bene! si possono realizzare immagini pessime con OGL e cose meravigliose con D3D, e anche il viceversa; ma diciamo che in linea di principio, se io dovessi creare un videogioco 3D verterei sulle DirectX, mentre se dovessi creare qualche altro tipo di programma con funzionalità di grafica 3D utilizzerei OpenGL (anche perché IMHO è + facile da usare); e tutto questo, tante volte non si fosse colto dal tono del discorso, è un mio parere completamente opinabile e per nulla oggettivo.


I motivi per cui DX vengono scelte per la maggior parte dei giochi li ha già spiegati Fek sopra. Nota che nemmeno lui ha menzionato velocità o qualità.

e allora almeno la velocità la menziono io! :p

71104
16-03-2005, 13:57
Originariamente inviato da fek
Il Debug runtime delle D3D ti avverte di ogni oggetto che dimentichi di rilasciare. Quindi basta semplicemente seguire gli esempi dei doc.
quello che intendevo è: mettiamo che tu vieni avvertito di un leak di un oggetto COM; se non sai neanche cos'è un oggetto COM, caschi dalle nuvole, e poi non sai come correggerlo; oggetti e oggetti COM non sono mica la stessa cosa! ;)

palu15
16-03-2005, 15:50
Non sono ferrato sulle librerie DirectX e di OpenGL ho visto poco, quindi dare un giudizio da parte mia non avrebbe senso... Concordo xo' su una cosa con 71104, usare oggetti COM (come le DirectX) senza sapere cosa sono non mi sembra una idea furba. Il discorso e' generale: qualunque strumento si usi (sia essa una libreria, un framework o anche un semplice Wizard) e' buona norma imparare a conoscere cosa fa, non solo come si usa.

Futuregames
16-03-2005, 16:02
ok ora nn parliamo in ostrogoto:D

cmq mi aiutate un attimino? sto iniziando e ogni tutorial nn mi si compila!!!

ho installato le directx 9 sdk e le ho incluse dentro visual studio...

ora per prima cosa vi chiedo ma è possibile che per fare una finestra in directx ci vogliano 7 kb di source??!!

fek
16-03-2005, 18:38
Originariamente inviato da 71104
quello che intendevo è: mettiamo che tu vieni avvertito di un leak di un oggetto COM; se non sai neanche cos'è un oggetto COM, caschi dalle nuvole, e poi non sai come correggerlo; oggetti e oggetti COM non sono mica la stessa cosa! ;)

So che non sono la stessa cosa. L'help delle DirectX ti dice che per distruggere un oggetto devi chiamare il metodo Release. Basta sapere questo per evitare il 99% dei resource leak, non serve conoscere COM. Ho programmato le D3D per anni sapendo a malapena che cosa fosse COM e l'ho studiato in seguito per diletto.

fek
16-03-2005, 18:41
Originariamente inviato da Futuregames
ok ora nn parliamo in ostrogoto:D

cmq mi aiutate un attimino? sto iniziando e ogni tutorial nn mi si compila!!!

ho installato le directx 9 sdk e le ho incluse dentro visual studio...

ora per prima cosa vi chiedo ma è possibile che per fare una finestra in directx ci vogliano 7 kb di source??!!

La maggior parte di quel codice serve per creare una finestra in Win32 e gestirne i messaggi. La creazione di un device D3D minimale sono si' e no una decina di righe di codice.

Ti consiglio di prendere un'applicazione D3D minimale e cominciare da quella piuttosto che provare a scrivere la tua applicazione da zero.

Prova qui:

http://www.xmission.com/~legalize/book/snippets/#minimal (e' DX8 ma non dovrebbe essere difficile adattarlo alle DX9)

http://www.merl.com/people/beardsley/Diamond3D/d3d-framework.html

http://www.wazooenterprises.com/tutorials/tutorial1-cube-D3D8.html

Futuregames
16-03-2005, 18:59
secondo voi usare un motore grafico tipo irrlitch o ogre è forviante?

71104
16-03-2005, 19:33
Originariamente inviato da Futuregames
cmq mi aiutate un attimino? sto iniziando e ogni tutorial nn mi si compila!!!

cvd ;)
magari (anzi, sicuramente) non c'entra nulla con gli oggetti COM, ma è una prova del concetto che volevo esprimere... ;)

71104
16-03-2005, 19:34
Originariamente inviato da fek
So che non sono la stessa cosa. L'help delle DirectX ti dice che per distruggere un oggetto devi chiamare il metodo Release. Basta sapere questo per evitare il 99% dei resource leak, non serve conoscere COM. Ho programmato le D3D per anni sapendo a malapena che cosa fosse COM e l'ho studiato in seguito per diletto.
e non hai mai controllato il Task Manager per vedere l'andazzo della memoria durante un'esecuzione prolungata del tuo software?

Futuregames
16-03-2005, 19:47
Originariamente inviato da 71104
cvd ;)
magari (anzi, sicuramente) non c'entra nulla con gli oggetti COM, ma è una prova del concetto che volevo esprimere... ;)


nn ho capito la tua frase


cvd è come volevasi dimostrare? se si spiegami la frase dopo

71104
16-03-2005, 19:52
Originariamente inviato da Futuregames
cvd è come volevasi dimostrare? se si spiegami la frase dopo
leggi quello che ho scritto prima :p
altri stanno dicendo che per programmare in DirectX non serve conoscere COM; io dico non solo che serve eccome, ma che in generale per usare uno strumento bisogna conoscere tutto quello che c'è da conoscere per usarlo. nel caso specifico oltrettutto non è solo una questione di leak: è una questione di principio, spesso anche di risparmio di lavoro e di tempo.

fek
16-03-2005, 19:54
Originariamente inviato da 71104
e non hai mai controllato il Task Manager per vedere l'andazzo della memoria durante un'esecuzione prolungata del tuo software?

Si'. Ed ho sempre controllato i warning D3D all'uscita. Mai avuto alcun problema.

MSciglio
16-03-2005, 19:54
Originariamente inviato da 71104
allora però mi devi dire che è un "motore di grafica tridimensionale"... con quell'espressione io intendo semplicemente una parte di software che mi supporti nella renderizzazione di immagini 3D sfruttando l'eventuale supporto hardware, come fanno OpenGL e Direct3D (o DirectGraphics che siano). tu invece che intendi?


OpenGL e DX si chiamano API. O se proprio ci tieni ad usare il termine engine li puoi chiamare engine per la rasterizzazione di triangoli.
Un engine contiene tutto ciò che passa dal disegnare un triangolo ad una scena complessa di quelle che vedi nei giochi. Se non ti convince entriamo nel dettaglio.


Originariamente inviato da 71104
di questo non ero al corrente :p ora so 1 cosa in +! :)
cmq: non so esattamente cosa faccia questo D3DX, ma le vecchie Direct3D sono esattamente quello che io definisco "motore di grafica 3D"


Figurati... puoi coniare tutti i termini che vuoi ma così facendo sarai frainteso da molti.


Originariamente inviato da 71104
OK!!! va bene! si possono realizzare immagini pessime con OGL e cose meravigliose con D3D, e anche il viceversa; ma diciamo che in linea di principio, se io dovessi creare un videogioco 3D verterei sulle DirectX, mentre se dovessi creare qualche altro tipo di programma con funzionalità di grafica 3D utilizzerei OpenGL (anche perché IMHO è + facile da usare); e tutto questo, tante volte non si fosse colto dal tono del discorso, è un mio parere completamente opinabile e per nulla oggettivo.


Ovviamente è legittimo avere delle proprie idee. Ma è cosa buona che queste siano sostenute da motivazioni tecniche valide in generale.

Originariamente inviato da 71104
e allora almeno la velocità la menziono io! :p


Ovviamente per dire questo avrai fatto estenuanti sessioni di profiling, vero? :)

MSciglio
16-03-2005, 19:56
Originariamente inviato da fek
So che non sono la stessa cosa. L'help delle DirectX ti dice che per distruggere un oggetto devi chiamare il metodo Release. Basta sapere questo per evitare il 99% dei resource leak, non serve conoscere COM. Ho programmato le D3D per anni sapendo a malapena che cosa fosse COM e l'ho studiato in seguito per diletto.

Sottoscrivo. Per utilizzare DX alla perfezione ti basta conoscere le nozioni di COM descritte nelle prime due pagine della documentazione dell'SDK.

fek
16-03-2005, 19:58
Originariamente inviato da 71104
leggi quello che ho scritto prima :p
altri stanno dicendo che per programmare in DirectX non serve conoscere COM; io dico non solo che serve eccome, ma che in generale per usare uno strumento bisogna conoscere tutto quello che c'è da conoscere per usarlo. nel caso specifico oltrettutto non è solo una questione di leak: è una questione di principio, spesso anche di risparmio di lavoro e di tempo.

Forse non mi sono spiegato: nessuno ha detto che non sia molto utile conoscere al meglio gli strumenti che si usano, e' talmente ovvio.
Ho detto che per un uso base delle DirectX non e' necessario conoscere COM, per me non e' stato necessario fino a qualche anno fa (ho qualcosa come 6 anni di esperienza in D3D). Ovviamente per usi avanzati, conoscere COM aiuta.

Il problema di futuregames e' dovuto alle win32: non e' intuitivo creare una finestra e gestirne la coda di messaggi se si e' alle prime armi. Creata la finestra, per creare un device D3D funzionante bastano una decina di righe di codice (come si puo' notare dai link che ho postato).

MSciglio
16-03-2005, 19:59
Originariamente inviato da 71104
leggi quello che ho scritto prima :p
altri stanno dicendo che per programmare in DirectX non serve conoscere COM; io dico non solo che serve eccome, ma che in generale per usare uno strumento bisogna conoscere tutto quello che c'è da conoscere per usarlo. nel caso specifico oltrettutto non è solo una questione di leak: è una questione di principio, spesso anche di risparmio di lavoro e di tempo.

Devo dissentire ancora una volta. Conoscere COM oltre le nozioni di base descritte nell'SDK è per puro piacere personale. La non conoscenza approndita non implica in alcun modo nessun cattivo utilizzo o limitazione di esso. Se avessi usato le DirectX capiresti di cosa parlo.

Banus
16-03-2005, 20:08
Originariamente inviato da MSciglio
Conoscere COM oltre le nozioni di base descritte nell'SDK è per puro piacere personale. La non conoscenza approndita non implica in alcun modo nessun cattivo utilizzo o limitazione di esso. Se avessi usato le DirectX capiresti di cosa parlo.
Infatti dalle DirectX 8 non è necessario scrivere neppure una riga di codice di COM per avere un programma funzionante (partendo da zero). Prima era necessario scrivere qualche riga COM per l'inizializzazione, ma bastavano conoscenze elementari (e al massimo ti imparavi le istruzioni senza preoccuparti del senso).

71104
16-03-2005, 21:26
Originariamente inviato da MSciglio
OpenGL e DX si chiamano API. O se proprio ci tieni ad usare il termine engine li puoi chiamare engine per la rasterizzazione di triangoli.
Un engine contiene tutto ciò che passa dal disegnare un triangolo ad una scena complessa di quelle che vedi nei giochi. Se non ti convince entriamo nel dettaglio.

entriamo, ma non troppo ;)
vorrei solo capire cosa ha per te un vero "motore di grafica 3D" di più rispetto alle OpenGL o alle DirectGraphics (le ho chiamate col nuovo nome ;))


Figurati... puoi coniare tutti i termini che vuoi ma così facendo sarai frainteso da molti.

guarda che ho sentito definire le Direct3D e le OpenGL due "motori di grafica 3D" MILIARDI di volte... mica una eh, MILIARDI! per essere più precisi, questa è la prima volta che sento una smentita :p


Ovviamente è legittimo avere delle proprie idee. Ma è cosa buona che queste siano sostenute da motivazioni tecniche valide in generale.

motivazione tecnica: le DirectX offrono funzioni molto specifiche per il supporto di videogiochi (3D e non), e permetteono lo sviluppo di un videogioco anche senza una solida conoscenza del subsystem Win32, ma al limite con solo qualche conoscenza basilare di programmazione Windows in generale (più, ovviamente, la tecnologia COM); inoltre ritengo le DirectGraphics (ci sto prendendo gusto ;)) molto ben ottimizzate, anche se chiaramente non posso verificare quest'ultimo punto perché non ho a disposizione il loro sorgente.


Ovviamente per dire questo avrai fatto estenuanti sessioni di profiling, vero? :)

ovviamente non ho fatto un benemerito CA...!!! :)
per dire questo non faccio altro che rifarmi a quanto scritto sopra, ma attenzione: NON sto affermando che le DirectGraphics SONO più veloci delle OpenGL, ma una cosa sottilmente diversa.

71104
16-03-2005, 21:34
Originariamente inviato da MSciglio
Devo dissentire ancora una volta. Conoscere COM oltre le nozioni di base descritte nell'SDK è per puro piacere personale. La non conoscenza approndita non implica in alcun modo nessun cattivo utilizzo o limitazione di esso. Se avessi usato le DirectX capiresti di cosa parlo.
va bene; questo punto lo prendo x buono.
(però se dovessi fare io un videogioco 3D un'occhiatina a COM me la darei lo stesso... :p)

Futuregames
16-03-2005, 21:44
in sostanza ho capito quasi nulla delle vostre discussioni ma ho capito che meta dicono che directx è più facile meta opengl più facile...

Com altro linguaggio?

rispondete a questa?: meglio basarsi in un motore grafico già prestabilito come ogre o irrlitch o farsene uno per il proprio gioco?

end.is.forever
16-03-2005, 21:52
Secondo me il miglior modo per avvicinarsi alle DirectX per uno alle prime armi con Win32, COM eccetera è usare .NET; non dover gestire la memoria e avere a disposizione Windows Forms secondo me permettono di concentrarti di più sull'uso delle API che ti interessano.

Se poi si è alle prime armi anche con C++, io consiglierei piuttosto C# perchè è più intuitivo per un principiante e automatizza parecchie cose.

Tutto questo IMHO perchè finora ho avuto occasione di provare solo le unmanaged.

MSciglio
16-03-2005, 22:09
Originariamente inviato da 71104
entriamo, ma non troppo ;)
vorrei solo capire cosa ha per te un vero "motore di grafica 3D" di più rispetto alle OpenGL o alle DirectGraphics (le ho chiamate col nuovo nome ;))


Per avere un'idea di cosa si intende per engine dai un'occhiata qui:
http://www.ogre3d.org/

Nel manuale è spiegata l'architettura.


Originariamente inviato da 71104
guarda che ho sentito definire le Direct3D e le OpenGL due "motori di grafica 3D" MILIARDI di volte... mica una eh, MILIARDI! per essere più precisi, questa è la prima volta che sento una smentita :p


In tal caso è stato usato un linguaggio improprio :) Per curiosità mi daresti qualche link a uno dei miliardi di siti che usano questo termine?

Originariamente inviato da 71104
motivazione tecnica: le DirectX offrono funzioni molto specifiche per il supporto di videogiochi (3D e non), e permetteono lo sviluppo di un videogioco anche senza una solida conoscenza del subsystem Win32, ma al limite con solo qualche conoscenza basilare di programmazione Windows in generale (più, ovviamente, la tecnologia COM); inoltre ritengo le DirectGraphics (ci sto prendendo gusto ;)) molto ben ottimizzate, anche se chiaramente non posso verificare quest'ultimo punto perché non ho a disposizione il loro sorgente.


Anche questa volta non sono d'accordo. Entrambi richiedono le medesime conoscenze per approcciarsi ad esse.
In base a cosa dici che DirectGraphics sono più ottimizzate?

Originariamente inviato da 71104
ovviamente non ho fatto un benemerito CA...!!! :)
per dire questo non faccio altro che rifarmi a quanto scritto sopra, ma attenzione: NON sto affermando che le DirectGraphics SONO più veloci delle OpenGL, ma una cosa sottilmente diversa.

La frase "e allora almeno la velocità la menziono io!" l'hai detta tu ;)

MSciglio
16-03-2005, 22:13
Originariamente inviato da Futuregames
in sostanza ho capito quasi nulla delle vostre discussioni ma ho capito che meta dicono che directx è più facile meta opengl più facile...

Com altro linguaggio?

rispondete a questa?: meglio basarsi in un motore grafico già prestabilito come ogre o irrlitch o farsene uno per il proprio gioco?

Come ho scritto sopra prima inizi a studiarti il C++ come si deve, poi studi DX o OGL, poi ti studi un engine già pronto tipo Ogre e quando hai fatto tutto ciò puoi iniziare a pensare di scrivere qualcosa tu.

MSciglio
16-03-2005, 22:16
Originariamente inviato da end.is.forever
Secondo me il miglior modo per avvicinarsi alle DirectX per uno alle prime armi con Win32, COM eccetera è usare .NET; non dover gestire la memoria e avere a disposizione Windows Forms secondo me permettono di concentrarti di più sull'uso delle API che ti interessano.

Se poi si è alle prime armi anche con C++, io consiglierei piuttosto C# perchè è più intuitivo per un principiante e automatizza parecchie cose.

Tutto questo IMHO perchè finora ho avuto occasione di provare solo le unmanaged.

Sono d'accordo. Le DirectX managed sono sempre più valide e lo saranno sempre di più in futuro. La curva di apprendimento è certamente notevolmente inferiore e a meno che non serva ottimizzazione estrema (vedi giochi) è un'ottima alternativa.

Futuregames
16-03-2005, 22:21
Originariamente inviato da MSciglio
Come ho scritto sopra prima inizi a studiarti il C++ come si deve, poi studi DX o OGL, poi ti studi un engine già pronto tipo Ogre e quando hai fatto tutto ciò puoi iniziare a pensare di scrivere qualcosa tu.


le tue risposte forse è solo un mio parere ma sembrano arroganti io sto chiedendo mentre tu rispondi altro

c++ io lo so praticamente nn so visual c++ che nn l'ho mai imparato. Mi manca il sostanziale uso delle classi in c++ perchè nn l'ho approfondito.

Futuregames
16-03-2005, 22:26
tanto per chiedere nn so se volete rispondere a sto punto con c# 'utente finale deve avere per forza il .net framework??

end.is.forever
16-03-2005, 22:32
Originariamente inviato da Futuregames
tanto per chiedere nn so se volete rispondere a sto punto con c# 'utente finale deve avere per forza il .net framework??

Si ci vuole per forza, o se no, quando saranno disponibili, dei sistemi operativi che lo implementino nativamente.

MSciglio
16-03-2005, 22:33
Originariamente inviato da Futuregames
le tue risposte forse è solo un mio parere ma sembrano arroganti io sto chiedendo mentre tu rispondi altro

c++ io lo so praticamente nn so visual c++ che nn l'ho mai imparato. Mi manca il sostanziale uso delle classi in c++ perchè nn l'ho approfondito.

Le mie risposte arroganti? E perchè?

Tu hai chiesto: "meglio basarsi in un motore grafico già prestabilito come ogre o irrlitch o farsene uno per il proprio gioco?"

e io ho risposto: "come ho scritto sopra prima inizi a studiarti il C++ come si deve, poi studi DX o OGL, poi ti studi un engine già pronto tipo Ogre e quando hai fatto tutto ciò puoi iniziare a pensare di scrivere qualcosa tu".

Da questa frase mi sembrava si evincesse il fatto che è meglio basarsi su un motore già pronto come ogre o irrlitch prima di dedicarsi alla stesura di un proprio engine, per cui la risposta alla tua domanda era implicita.

71104
17-03-2005, 00:03
Per avere un'idea di cosa si intende per engine dai un'occhiata qui:
http://www.ogre3d.org/

Nel manuale è spiegata l'architettura.

doh! :muro: eddai, a quest'ora non mi va di cercare e leggere! :cry:
scusa, perché non mi dici brevemente qualche interessante caratteristica di un vero motore grafico che manca alle OpenGL e alle DirectGraphics?


In tal caso è stato usato un linguaggio improprio :) Per curiosità mi daresti qualche link a uno dei miliardi di siti che usano questo termine?

e che ne so, non sono siti; semplicemente io non ho mai sentito dire finora che Direct3D NON E' un motore grafico 3D!!!


Anche questa volta non sono d'accordo. Entrambi richiedono le medesime conoscenze per approcciarsi ad esse.
In base a cosa dici che DirectGraphics sono più ottimizzate?

non dico che SONO più ottimizzate, dico che lo sono assai! e lo dico in base all'idea che ho circa il loro funzionamento, idea necessariamente limitata, visto che non ho i sorgenti.


La frase "e allora almeno la velocità la menziono io!" l'hai detta tu ;)
e 1000 volte la ripeterei ;)

71104
17-03-2005, 00:07
Originariamente inviato da Futuregames
tanto per chiedere nn so se volete rispondere a sto punto con c# 'utente finale deve avere per forza il .net framework??
si, devi avere o quello o qualcosa di analogo, come Mono.

71104
17-03-2005, 00:12
Originariamente inviato da MSciglio
Come ho scritto sopra prima inizi a studiarti il C++ come si deve, poi studi DX o OGL, poi ti studi un engine già pronto tipo Ogre e quando hai fatto tutto ciò puoi iniziare a pensare di scrivere qualcosa tu.
da questa frase comincio ad intendere vagamente a cosa ti riferisci con l'espressione "motore grafico 3D", però non mi trovi d'accordo: se ho ben capito, per te un "motore grafico 3D" è la parte di software implementata dal programma finale che gestisce il... come lo vogliamo chiamare a questo punto DirectGraphics? le librerie sottostanti, le quali a loro volta si occupano della renderizzazione dell'immagine (non so se renderizzazione è il termine giusto, qualcosa la so di grafica 3D, ho sviluppato un paio di progettini-ini-ini, ma non molto). quindi suppongo che per te il fatidico engine si occupi di qualcosa come:
- caricare da files modelli 3D e generare strutture per la loro memorizzazione
- gestione della renderizzazione di queste strutture (tramite le "librerie grafiche", chiamiamole così)
be', tuttavia continuo ad essere del mio parere.

fek
17-03-2005, 09:13
Originariamente inviato da Futuregames
le tue risposte forse è solo un mio parere ma sembrano arroganti io sto chiedendo mentre tu rispondi altro

c++ io lo so praticamente nn so visual c++ che nn l'ho mai imparato. Mi manca il sostanziale uso delle classi in c++ perchè nn l'ho approfondito.

Ti assicuro che invece ti sta dando molti consigli pratici da seguire. In fondo lui ha seguito esattamente la strada che ti suggerisce ed e' riuscito a fare il programmatore 3d di professione.

Ti consiglio anch'io di iniziare prima dal C# e con le DX Managed, invece di impelagarti col C++ che ti propone fin da subito un linguaggio ricco (non ci sono solo le classi da imparare) e moltissimi problemi che e' preferibile non affrontare da subito.
Una volta che padroneggi C# e DX Managed con una certa sicurezza, puoi affrontare il C++ e i suoi problemi. Purtroppo io ho fatto il percorso contrario e non e' stata una passeggiata di salute.

Si', l'utente finale ha bisogno del framework .NET se scrivi in C# ma questo non e' un problema nel tuo caso per due motivi:

1) Il framework e' sempre piu' standard (ad esempio viene installato di default con l'SP2 se non mi sbaglio)

2) Tutto quello che scriverai nei prossimo due o tre anni molto probabilmente non raggiungera' mai un utente finale; non e' per sfiducia nei tuoi confronti, anzi, ma e' il percorso che abbiamo fatto tutti noi

fek
17-03-2005, 09:17
Originariamente inviato da 71104
- caricare da files modelli 3D e generare strutture per la loro memorizzazione
- gestione della renderizzazione di queste strutture (tramite le "librerie grafiche", chiamiamole così)
be', tuttavia continuo ad essere del mio parere.

Per definizione (su vari libri che si occupano di grafica 3d in real time), il motore 3d si occupa della gestione del grafo della scena, degli oggetti per intenderci, che non comprende ad esempio il caricamento degli oggetti stessi.
La gestione include anche la rasterizzazione dei poligoni che formano gli oggetti, ma in genere questa fase e' gestita da una libreria di rasterizzazione (OGL o D3D) che nella maggioranza dei casi demandando il compito ad hardware dedicato (una GPU), ma esistono anche implementazioni software delle librerie di rasterizzazione.

Se un sistema software non si occupa della gestione della scena, non e' un motore 3d, infatti OGL e D3D non sono motori 3d. Questa non e' una questione di opinioni o interpretazioni, e' una definizione.

fek
17-03-2005, 09:27
non dico che SONO più ottimizzate, dico che lo sono assai! e lo dico in base all'idea che ho circa il loro funzionamento, idea necessariamente limitata, visto che non ho i sorgenti.


E' vero l'esatto contrario.
Per quanto fare un discorso di questo tipo lascia il tempo che trova, perche' le differenze prestazionali sono minime e riscontrabili solo in situazioni particolari o estreme, le OpenGL sono piu' efficienti delle Direct3D: semplicemente perche' presentano all'utente uno strato piu' sottile verso l'hardware.

Un esempio e' il rendering di molti gruppi di pochi poligoni (e' una di quelle situazioni estreme). In OpenGL si puo' raggiungere un valore di poligoni al secondo piu' alto di quello che si puo' raggiungere in D3D, che in questa situazione presenta un maggiore overhead. E' anche vero che questo e' proprio uno dei colli di bottiglia famoso delle D3D che verra' corretto in WGF 2.0.

Futuregames
17-03-2005, 15:50
Originariamente inviato da 71104
da questa frase comincio ad intendere vagamente a cosa ti riferisci con l'espressione "motore grafico 3D", però non mi trovi d'accordo: se ho ben capito, per te un "motore grafico 3D" è la parte di software implementata dal programma finale che gestisce il... come lo vogliamo chiamare a questo punto DirectGraphics? le librerie sottostanti, le quali a loro volta si occupano della renderizzazione dell'immagine (non so se renderizzazione è il termine giusto, qualcosa la so di grafica 3D, ho sviluppato un paio di progettini-ini-ini, ma non molto). quindi suppongo che per te il fatidico engine si occupi di qualcosa come:
- caricare da files modelli 3D e generare strutture per la loro memorizzazione
- gestione della renderizzazione di queste strutture (tramite le "librerie grafiche", chiamiamole così)
be', tuttavia continuo ad essere del mio parere.


esatto hai ragione ti volevo chiedere per iniziare come riuscirei a importare per esempio un modello 3d in una finestra direct3d? è troppo difficile?

71104
17-03-2005, 16:10
Originariamente inviato da Futuregames
esatto hai ragione ti volevo chiedere per iniziare come riuscirei a importare per esempio un modello 3d in una finestra direct3d? è troppo difficile?
se devi caricare il modello da un file devi avere una conoscenza minimale delle Win32, non credo che le DirectX ti permettano di leggere files. cmq cerca in MSDN le funzioni CreateFile e ReadFile; c'è anche WriteFile per scrivere i files, ma quella non ti interessa. tieni presente che CreateFile è piuttosto complicata perché non serve solo ad aprire i files, ma anche pseudofiles per mappare periferiche, porte seriali/parallele e cose così.
dopodiché è ovvio che per leggere un file devi conoscerne il formato, e questo dipende dalla forma in cui hai salvato il modello in questione; ad esempio con 3D Studio Max è possibile esportare oggetti 3D in formato 3DS, un formato pubblicamente documentato.
poi, una volta che hai aperto il file e lo stai leggendo devi, man mano che lo leggi, memorizzarlo in strutture apposite (grafi, come li hanno giustamente chiamati), e infine disegnarlo trasformandolo opportunamente con le matrici.

71104
17-03-2005, 16:15
Originariamente inviato da fek
E' vero l'esatto contrario.

cioè che non sono molto ottimizzate, ma che lo sono di più? :D
vabbè, scherzo, ho capito; :p
ho capito che sto 3d non fa x me... ^^'

fek
17-03-2005, 17:36
Originariamente inviato da 71104
se devi caricare il modello da un file devi avere una conoscenza minimale delle Win32, non credo che le DirectX ti permettano di leggere files.


HRESULT WINAPI D3DXLoadMeshFromX( LPCTSTR pFilename,
DWORD Options,
LPDIRECT3DDEVICE9 pD3DDevice,
LPD3DXBUFFER *ppAdjacency,
LPD3DXBUFFER *ppMaterials,
LPD3DXBUFFER *ppEffectInstances,
DWORD *pNumMaterials,
LPD3DXMESH *ppMesh
);

:p

MSciglio
17-03-2005, 20:24
Originariamente inviato da fek

HRESULT WINAPI D3DXLoadMeshFromX( LPCTSTR pFilename,
DWORD Options,
LPDIRECT3DDEVICE9 pD3DDevice,
LPD3DXBUFFER *ppAdjacency,
LPD3DXBUFFER *ppMaterials,
LPD3DXBUFFER *ppEffectInstances,
DWORD *pNumMaterials,
LPD3DXMESH *ppMesh
);

:p

Non rispondere così altrimenti poi ti dicono che sei arrogante! :D

Futuregames
17-03-2005, 20:26
Originariamente inviato da MSciglio
Non rispondere così altrimenti poi ti dicono che sei arrogante! :D


no nn mi hai capito forse: arrogante era perchè insistevi con il c++ ma io so cosa devo fare ad un certo punto e siccome ti chiedo altro nn puoi rispondermi male come dire "sta zitto e imparati il c++ e vai a casa va"

inzomma!

MSciglio
17-03-2005, 20:49
Originariamente inviato da Futuregames
no nn mi hai capito forse: arrogante era perchè insistevi con il c++ ma io so cosa devo fare ad un certo punto e siccome ti chiedo altro nn puoi rispondermi male come dire "sta zitto e imparati il c++ e vai a casa va"

inzomma!

Hai interpretato malissimo la mia risposta a quanto pare. Nella mia risposta non c'era scritto solo studiati il C++ ma c'era scritto anche come procedere. Mi permetto di darti suggerimenti perchè sono stato anche io principiante e ho visto anche molti principianti che sono rimasti tali perchè hanno voluto fare passi troppo lungo.
Secondo te mi passo il tempo scrivendo nei forum e dicendo "imparati il c++ e vai a casa va"? Sbagli proprio...

Futuregames
17-03-2005, 20:55
Originariamente inviato da MSciglio
Hai interpretato malissimo la mia risposta a quanto pare. Nella mia risposta non c'era scritto solo studiati il C++ ma c'era scritto anche come procedere. Mi permetto di darti suggerimenti perchè sono stato anche io principiante e ho visto anche molti principianti che sono rimasti tali perchè hanno voluto fare passi troppo lungo.
Secondo te mi passo il tempo scrivendo nei forum e dicendo "imparati il c++ e vai a casa va"? Sbagli proprio...


bene ok allora ci siamo capiti:D

ti ho aggiunto prima a icq sperando di nn romperti:)

^TiGeRShArK^
17-03-2005, 22:36
Scusate.... ma a 'sto punto o sono io ke fino ad ora non ho capito una mazza o mi sfugge qualcosa......
i COM non sono delle librerie del visual c++????
ke cosa avrebbero di così pauroso???
Oramai è da un secolo ke nn programmo in c++ e il visual c++ l'ho visto solo di striscio diciamo, ma cmq nei prox giorni dovrei riprenderli un pò forse......
sempre se nn mi metto appresso al c#, anke perkè il prog ke devo fare l'ho già fatto in java, solo ke a causa dell'autenticazione bastarda del server sharepoint non riesco ad accedere ai file xml ke sono sul portale......

ma se mi dite ke i com sono un casino mi fiondo direttamente sul c# se quello ke voglio fare non si può fare col j#......

MSciglio
17-03-2005, 23:09
Originariamente inviato da ^TiGeRShArK^

Scusate.... ma a 'sto punto o sono io ke fino ad ora non ho capito una mazza o mi sfugge qualcosa......
i COM non sono delle librerie del visual c++????
ke cosa avrebbero di così pauroso???
Oramai è da un secolo ke nn programmo in c++ e il visual c++ l'ho visto solo di striscio diciamo, ma cmq nei prox giorni dovrei riprenderli un pò forse......
sempre se nn mi metto appresso al c#, anke perkè il prog ke devo fare l'ho già fatto in java, solo ke a causa dell'autenticazione bastarda del server sharepoint non riesco ad accedere ai file xml ke sono sul portale......

ma se mi dite ke i com sono un casino mi fiondo direttamente sul c# se quello ke voglio fare non si può fare col j#......


Non hanno nulla di pauroso ma non sono una libreria del Visual C++.
COM (Component Object Model) è una specifica Microsoft per la creazione di moduli riciclabili e la loro comunicazione.
Sostanzialmente ogni componente espone le proprie funzionalità attraverso un certo numero di interfacce tramite le quali gli utilizzatori del componente possono fruire dei propri servizi.
Tutti i componenti devono esporre un'interfaccia comune (IUnknown) che funge da punto di accesso per le altre interfacce specifiche del componente.

Ovviamente è una vergognosa semplificazione di cosa è realmente COM ma spero di avere reso l'idea :)

cionci
18-03-2005, 07:17
Comunque dipende anche da cosa uno deve programmare...

Se si cerca un minimo di portabilità allora è meglio OpenGL, anche se probabilmente è più lungo un gioco serio in OpenGL...

OpenGL è più usato anche quando si tratta di programmare software diversi da giochi...

Per il resto DirectX...

71104
18-03-2005, 10:26
Originariamente inviato da fek

HRESULT WINAPI D3DXLoadMeshFromX( LPCTSTR pFilename,
DWORD Options,
LPDIRECT3DDEVICE9 pD3DDevice,
LPD3DXBUFFER *ppAdjacency,
LPD3DXBUFFER *ppMaterials,
LPD3DXBUFFER *ppEffectInstances,
DWORD *pNumMaterials,
LPD3DXMESH *ppMesh
);

:p
doh! ^^'
però quello serve a caricare UN SOLO specifico formato; e se il file ce l'hai in formato 3DS che fai? :p
se usi 3D Studio Max per creare i tuoi modelli devi come minimo convertirli in quel formato là (ora ti prego, non uscirtene con un link ad una pagina dove si scarica gratis un convertitore da 3DS a X... :muro: :D).

71104
18-03-2005, 10:28
Originariamente inviato da cionci
Comunque dipende anche da cosa uno deve programmare...

Se si cerca un minimo di portabilità allora è meglio OpenGL, anche se probabilmente è più lungo un gioco serio in OpenGL...

OpenGL è più usato anche quando si tratta di programmare software diversi da giochi...

Per il resto DirectX...
ooooooohhhhhh, finalmente; il pensiero di cionci coincide abbastanza con il mio. ;)

71104
18-03-2005, 10:31
Originariamente inviato da ^TiGeRShArK^

Scusate.... ma a 'sto punto o sono io ke fino ad ora non ho capito una mazza o mi sfugge qualcosa......
i COM non sono delle librerie del visual c++????
ke cosa avrebbero di così pauroso???
Oramai è da un secolo ke nn programmo in c++ e il visual c++ l'ho visto solo di striscio diciamo, ma cmq nei prox giorni dovrei riprenderli un pò forse......
sempre se nn mi metto appresso al c#, anke perkè il prog ke devo fare l'ho già fatto in java, solo ke a causa dell'autenticazione bastarda del server sharepoint non riesco ad accedere ai file xml ke sono sul portale......

ma se mi dite ke i com sono un casino mi fiondo direttamente sul c# se quello ke voglio fare non si può fare col j#......

le COM non sono librerie di VC++; VC++ come librerie "sue", diciamo così, ha solo il suo CRT; qualcuno potrebbe dire, anche le MFC e le ATL, ma io dico di no, perché quelle si possono usare anche in altri IDE.
le COM sono librerie vastamente utilizzate in tutto Windows (e ovviamente Microsoft l'ha fatto apposta ;) lo sai perché OpenGL sta iniziando ad esistere anche su Linux, mentre DirectX no? perché in Linux non c'è COM!!! e siccome esistono una marea sconfinata di giochi giochini e giochetti che usano DirectX, penso che per avere una buona diffusione di Linux dovremo aspettare ancora molto... :p)

fek
18-03-2005, 11:09
Originariamente inviato da 71104
doh! ^^'
però quello serve a caricare UN SOLO specifico formato; e se il file ce l'hai in formato 3DS che fai? :p
se usi 3D Studio Max per creare i tuoi modelli devi come minimo convertirli in quel formato là (ora ti prego, non uscirtene con un link ad una pagina dove si scarica gratis un convertitore da 3DS a X... :muro: :D).

http://francis.dupont.free.fr/coindev/english/direct3d/convert.htm


2) Convert to .X

We can't use the 3DS file in Direct3D Immediate Mode, we must first use the tool conv3ds.exe.
This program is useful. Here are the explaination of its command line.


:p

71104
18-03-2005, 11:52
Originariamente inviato da fek
http://francis.dupont.free.fr/coindev/english/direct3d/convert.htm

puntuale...

DanieleC88
18-03-2005, 12:45
Originariamente inviato da cionci
Comunque dipende anche da cosa uno deve programmare...

Se si cerca un minimo di portabilità allora è meglio OpenGL, anche se probabilmente è più lungo un gioco serio in OpenGL...

OpenGL è più usato anche quando si tratta di programmare software diversi da giochi...

Per il resto DirectX...
Precisamente. OpenGL infatti è usato molto per programmi scientifici o simili (comunque professionali, non tanto videoludici), nonostante sia adattissima anche ai giochi.

MSciglio
18-03-2005, 12:50
Originariamente inviato da 71104
doh! ^^'
però quello serve a caricare UN SOLO specifico formato; e se il file ce l'hai in formato 3DS che fai? :p
se usi 3D Studio Max per creare i tuoi modelli devi come minimo convertirli in quel formato là (ora ti prego, non uscirtene con un link ad una pagina dove si scarica gratis un convertitore da 3DS a X... :muro: :D).

Non serve il link. L'exporter per il formato X e' gia' incluso nell'SDK.

MSciglio
18-03-2005, 12:53
Originariamente inviato da cionci
Comunque dipende anche da cosa uno deve programmare...

Se si cerca un minimo di portabilità allora è meglio OpenGL, anche se probabilmente è più lungo un gioco serio in OpenGL...

OpenGL è più usato anche quando si tratta di programmare software diversi da giochi...

Per il resto DirectX...

OpenGL e' molto usato per altri tipi di software perche' in ambiente accademico si usa solo quello c'e' da dire.

^TiGeRShArK^
18-03-2005, 13:24
Originariamente inviato da MSciglio
Non hanno nulla di pauroso ma non sono una libreria del Visual C++.
COM (Component Object Model) è una specifica Microsoft per la creazione di moduli riciclabili e la loro comunicazione.
Sostanzialmente ogni componente espone le proprie funzionalità attraverso un certo numero di interfacce tramite le quali gli utilizzatori del componente possono fruire dei propri servizi.
Tutti i componenti devono esporre un'interfaccia comune (IUnknown) che funge da punto di accesso per le altre interfacce specifiche del componente.

Ovviamente è una vergognosa semplificazione di cosa è realmente COM ma spero di avere reso l'idea :)
un pò come i java beans quindi????

MSciglio
18-03-2005, 13:29
Originariamente inviato da ^TiGeRShArK^
un pò come i java beans quindi????

I componenti COM sono "installati" a livello di sistema operativo.

Banus
18-03-2005, 17:51
Originariamente inviato da ^TiGeRShArK^
un pò come i java beans quindi????
Da quel poco che so di COM, dovrebbe essere qualcosa di simile ma a livello locale. EJB e CORBA sono pensati per funzionare anche in remoto, il che aggiunge parecchie complicazioni. L'analogo (si fa per dire :D) di EJB è DCOM.

okay
18-03-2005, 23:08
Scusate l'intromissione........... bazzico ogni tanto quì e mi sono letto tutto questo post (ciao mitico cionci mio amico e grande fratellone)

prima rispondo al tred:
io uso directx per mille motivi il motivo in primis è che mi sono specializzato con le directx non lo sò neanche io il perchè forse per i tutorial che riuscivo a trovare + facilemente i maggiori erano sulle directx mi ricordo di aver scaricato tutti quelli di nehe ma feci solo i primi 21 tut in pratica ho usato pochissimo le opengl.

Ma vi posso garantire che ho visto demo fatte con opengl che non hanno nulla da invidiare alle directx. Anzi l'ultima (che mi fà proprioi rosicare) è una demo per motocross fatta con opengl supportata dalla fisica di ODE che è perfetta io invece...........

comunque:
-qual'è più richiesto da software house ecc
Le softwarehouse prendono i progetti migliori (non si chiedono con cosa sono fatti) forse per entrare in un team la maggior parte dei programmatori sanno usare e sono specializzati in directx

-quale vale di più se un programmatore cerca lavoro
La risposta è sopra ci sono più programmatori che usano directx

-difficolta
Le stesse

-difficolta e/o facilita di trovare materiale per imparare o uno o l'altro
Trovi + materiale per directx

-potenza degli engine
Stesse potenzialità
in fatto di input mouse keyboard sound supporta di + directx


e adesso:
Faccio parte di un team 2 programmatori un tot di modellatori un fisico un sound 2 addetti al businnes.
lo domando a chi è programmer 3d di videogame.

Per la gestione della fisica del gioco che cosa usi?
Hai fatto un motore tuo per la fisica oppure ti appoggi a codice free opensource.
io avrei voluto fare il motore per gestire la fisica del gioco soltanto che mi sarebbero serviti come minimo 6/8 mesi per farlo (ma è una cosa che farò prossimamente) e per il poco tempo che avevamo abbiamo scelto una libreria come ODE opensource per gestire la fisica.

scaricabile a: www.ode.org
In pratica avrei finito la demo (mi correggo avremo finito la demo) in quanto siamo 2 i programmatori.

Ho scoperto un bug della lib di ode di preciso nella trimesh collider in pratica le collisioni della moto nei tratti in discesa/salita della pista (la pista è una mesh) sprofondano troppo e per questo motivo la moto in questi tratti mi fà dei balzelli fastidiosi (cosa che non ho visto nella demo motocross detta prima).
Dato che ho fatto di tutto, addirittura penso di lasciare ODE e passare a novodex o havoc2 (dove ti danno il supporto per la fisica) e comunque sono a pagamento......... ma questa è una scelta che farò da piano di riserva (e mi ci rode proprio).
Per questo motivo sto scrivendo e aggiustando l'algoritmo delle collisioni in particolare in ode.lib.
Perchè penso anche che chi fà andare bene le collisioni su mesh abbia fatto un aggiustamento al codice di ode.

Mi fermo quì.................. se sapete qualcosa su una patch funzionante per questo problema ve ne sarei grato
Sul sito di ode, nel forum e altre conoscenze non sono riuscito a cavare nulla per queso problema.

ciao

MSciglio
18-03-2005, 23:41
Originariamente inviato da okay
Ma vi posso garantire che ho visto demo fatte con opengl che non hanno nulla da invidiare alle directx. Anzi l'ultima (che mi fà proprioi rosicare) è una demo per motocross fatta con opengl supportata dalla fisica di ODE che è perfetta io invece...........


Certamente. E' completamente sbagliato fare discorsi per simpatia sulla bontà di una API a scapito dell'altra.

Originariamente inviato da okay
lo domando a chi è programmer 3d di videogame.

Per la gestione della fisica del gioco che cosa usi?
Hai fatto un motore tuo per la fisica oppure ti appoggi a codice free opensource.


Purtroppo non posso dire cosa usiamo per la fisica nel nostro gioco.
Ad ogni modo i middleware fisici più utilizzati sono Havok e Novodex. Onestamente non mi è capitato di sentire aziende che usano middleware open source per progetti commerciali. O forse qualcuno stava usando ODE... non ricordo.

cionci
19-03-2005, 06:15
Ciao okay ;)

Quello che c'è di buono di ODE è che è sotto licensa BSD (la sento per la rpima volta ora)...quindi non ci sono le restrizione della licensa GNU... Di conseguenza si può utilizzare anche in programmi commerciali con l'unico obbligo di nominare la libreria e l'autore nei credit e/o nella documentazione del gioco...

cionci
19-03-2005, 06:22
Questo ODE è molto interessante...viene usato anche da Softimage|XSI !!!

okay
19-03-2005, 08:20
Si infatti come hai visto è opensource e devo dire che ho fatto tutto il lavoro con questa libreria che è a dir poco eccezionale per questo mi roderebbe cambiare tool.
Abbiamo fatto dei test per collisioni su 1000.000 di poligoni il pc non ha fatto una piega. Ha un controllo quadtree eccellente.
Però sono incappato in questo bug........... e sbirciando nella maillist mi pare di aver visto che questo tipo di bug fosse stato fixato
Io comunque uso la release 0.5 che ha a ncora questo bug.

Spero di risolvere perchè avrei finito veramente.

ciao mio amico metallaro, io sono contento

fek
19-03-2005, 09:35
A meno che tu non abbia particolari restrizioni prestazionali (e non dovresti averle), fai bene ad usare un middleware per la fisica. Ode va benissimo per iniziare, poi per progetti commerciali magari Havoc2 e' piu' robusto e supportato, ma direi che non e' il caso di preoccuparsene ora.

Scriversi un proprio motore fisico e' divertente ma e' una gran faticaccia.

Banus
19-03-2005, 09:36
Originariamente inviato da MSciglio
O forse qualcuno stava usando ODE... non ricordo.
Stalker, se non sbaglio.
Hanno preso ODE come base e l'hanno pesantemente modificato. Infatti il gioco mostra una fisica abbastanza evoluta.

Luc@s
03-04-2005, 10:27
up