PDA

View Full Version : [Videogioco 3D] Percorso di apprendimento degli strumenti necessari.


Lanus91
21-05-2010, 14:14
Salve a tutti.
Il mio obiettivo è di dare vita a un videogioco 3d che per ora vive allegramente solo nel mio cervellino.
Ennesima discussione sull'argomento, non potevi cercare un po' prima? Direte voi. In effetti ho cercato abbastanza in giro per la rete, reperendo qua e là qualche informazione ma senza riuscire a farmi un'idea definita dei vari aspetti.
Ho basi discrete di C++ e di C#, ma zero riguardo alla programmazione 3D. Inizialmente pensavo di realizzarlo in C++, ma leggendo una certa discussione di battaglia tra linguaggi ho capito, grazie alle spiegazioni di Fek, che è meglio utilizzare un linguaggio più alto ed elegante e concentrarsi sugli algoritmi (che non sono per nulla semplici per quanto ho capito) e delegare al .net il lavoro al livello più basso. Trovarsi di fronte ad un nuovo argomento così vasto è disarmante e mi sono sorte 3 domande:
1) E' possibile realizzare un videogioco con una grafica dignitosa in C# che giri sulla maggior parte dei pc attuali? Se non è possibile devo ritornare sui miei passi ed utilizzare C++.
2) Sono venuto a sapere che tutta la grafica 3d si basa sul calcolo vettoriale e matriciale e pur non essendo del tutto all'oscuro dell'argomento, lo conosco solo in maniera elementare. Su internet ho trovato molti tutorial, che però spesso mancano dei concetti base e danno per scontati molti passaggi. Mi piace imparare le cose in modo sistematico, piuttosto che inferenziare i concetti da esempi, perchè credo sia il modo più veloce e più preciso. Esiste un libro (magari in italiano) che faccia una cosa del genere, spiegando gli algoritmi più ricorrenti che stanno dietro la grafica 3d?
3) Mi sapreste consigliare un libro ben fatto che parli più specificatamente delle DirectX9 e delle sue principali classi/funzioni?
Grazie per l'interessamento :)

PGI-Bis
21-05-2010, 14:30
Potresti usare anche javascript, in ogni caso il 99.99% dei problemi che incontrerai riguarderà la creazione dei modelli 3D da ficcare dentro al gioco.

Lanus91
21-05-2010, 14:37
Si in effetti fare i modelli 3D è una delle parti che mi piace meno, dovrò trovare qualche collaboratore o imparare a farlo bene io stesso.
Ma quello che più mi preme è come fare a gestire le collisioni. Ci dev'essere molta matematica alle spalle del processo, ma finchè non conoscerò bene l'argomento non potrò inventarmi niente.

astorcas
21-05-2010, 15:04
Ma se ti appoggiassi ad engine 3d (gratuiti)? Oppure pensi che ti toglierebbero tutto il divertimento? :)

PGI-Bis
21-05-2010, 15:06
Ci sono delle librerie ad hoc per quello. Ad esempio se usi bullet (un set di api per la gestione della fisica) prendi i modelli 3d, crei tramite le api uno spazio di simulazione, gli ficchi dentro i modelli e sei praticamente a posto: collisioni, strusciamenti, salti, i conti li fa tutti la libreria per la gestione della fisica.

Un discorso analogo vale per gli effetti. Se cerchi in rete informazioni sul calcolo delle ombre in tempo reale trovi un sacco di bellissimi articoli tutti molto complicati ma a conti fatti non te ne frega una mazza perchè un qualsiasi motore di rendering in tempo reale tra quelli liberamente disponibili è già predisposto a proiettare le ombre senza che tu debba far altro che dire "tizio può proiettare un'ombra" dove tizio è un file che hai creato usando Blender.

Idem per la temibile ripartizione dello spazio 3d: non scrivi a mano la gestione di un octree che poi si arrota per ripartire i triangoli in gruppi a sei gambe... no, è tutto precotto.

Il codice che scrivi lo scrivi per coordinare le cose che hai nel gioco ed è quasi rilassante dopo che hai passato tre giorni per disegnare un robot che cammina che nella tua testa era la cosa più spettacolare mai vista e che sul tuo schermo sembra vagamente un cumulo di cubi in preda ad un attacco epilettico.

deadlyomen17
21-05-2010, 15:07
solitamente si sviluppa un gioco 3d usando un motore grafico, e non da zero.

il discorso dei modellini 3d è molto complesso, e dovrai spenderci un po di tempo, soprattutto per quanto riguarda le animazioni.

ora se però il tuo obiettivo è di fare un giochino 3d da solo, o comunque con pochi collaboratori, non credo che ti necessiti fare una grafica ad alti livelli.

la mia esperienza col 3d risale a qualche mese fa, quando più che altro come sfida, ho iniziato a creare un third person shooter 3d, con anche un po di fisica, in Java, con 2 colleghi universitari (3o anno di informatica...il gioco è stato consegnato come progetto per un esame di Java e la programmazione ad eventi).

il risultato di 3 mesi di lavoro (partendo da zero come conoscenza sia di java, sia di 3d, sia di modeling, sia di game programming) è questo:
Last Chance (http://unical-3d-game.googlecode.com)

abbiamo sviluppato questo giochino interamente in java, usando il motore jMonkey Engine (http://www.jmonkeyengine.com/), e la sua estensione per la fisica jME Physics (http://code.google.com/p/jmephysics/)

la maggior parte dei modellini 3d usati nel gioco li ho fatti io da zero o quasi, così come le animazioni del personaggio (si vede direi)
altri modellini li ho trovati in giro sulla rete, trovi i riferimenti nei Credits del gioco, ma li ho dovuti comunque modificare parecchio per renderli più leggeri (il framerate è già troppo basso se non si ha almeno una scheda discreta...e con schede poco potenti non funziona quasi proprio...ma capirai il perchè...).

alla luce di questo, il mio personale consiglio è di informarti un po su queste librerie e considerare l'opportunità di sviluppare il tuo gioco in java...così sarà compatibile anche con i diversi sistemi operativi

se invece vuoi avere maggiori prestazioni, e quindi vuoi scrivere in C++, ti consiglio di dare un'occhiata al fantastico motore grafico Ogre (http://www.ogre3d.org/) e se ti interessa la fisica, al motore fisico Open Dynamics Engine (http://ode.org/)

tutte le soluzioni che ti ho proposto sono rilasciate sotto licenza Libera, quindi puoi usarle, modificarle, ridistribuirle nella tua applicazione senza alcun vincolo.

Lanus91
21-05-2010, 15:34
Ma se ti appoggiassi ad engine 3d (gratuiti)? Oppure pensi che ti toglierebbero tutto il divertimento? :)

Eheh è proprio quello che penso, per come sono fatto non ci sarebbe divertimento e neanche soddisfazione.
Poi mi piace arrivare il più in fondo possibile nelle questioni e partire dalle fondamenta e poi costruirci il resto... non so quanto imprenditoriale sia il mio modo di ragionare, ma io lo faccio per piacere e non per soldi.

ora se però il tuo obiettivo è di fare un giochino 3d da solo, o comunque con pochi collaboratori, non credo che ti necessiti fare una grafica ad alti livelli.

Ma infatti non avevo in mente nulla di eccezionale. I modelli 3D non dovrebbero essere troppo dettagliati perchè la telecamera la metterei fissa dall'alto. Il risultato dovrebbe essere simile ai giochi isometrici, con la sola differenza che si può ruotare la visuale.

Certo realizzare tutto solo a partire dalle DirectX è difficile, ma almeno poi so come si fa :)

deadlyomen17
21-05-2010, 15:50
un po masochista a mio avviso :D

a questo punto di consiglio OpenGL e C++

DirectX è solo per sistemi Windows
usando OpenGL almeno fai qualcosa di compatibile con i diversi sistemi.

il divertimento comunque ti assicuro che c'è anche usando un engine...resta comunque complicato gestire una intera scena 3d, con intelligenza artificiale degli eventuali nemici, animazioni varie, collisioni etc.

Lanus91
21-05-2010, 17:03
un po masochista a mio avviso :D
eheh forse si!

a questo punto di consiglio OpenGL e C++
Ma mi sa che così è ancora più masochistico :p
C++ complica abbastanza il codice.


Mi sapete consigliare dei manuali per masochisti come me?
Ho cercato in giro ma le risposte sono per lo più di qualche anno fa. Vorrei sapere se c'è qualcosa di recente.

Edit: Ho trovato questo (http://www.ateneonline.it/catlibro.asp?item_id=1942). Che ne pensate?

Tommo
21-05-2010, 17:49
Con OpenGL facci l'abitudine, a meno che tu non usi OpenGLES o qualcosa di nuovo per forza di cose i tutorial più famosi vanno dal vecchierrimo al deprecato.
Trovare la documentazione è forse il motivo per cui OpenGL è difficile, per il resto quando sapevo dove mettere le mani non ho avuto alcun problema.

PS: ti consiglio di partire ad alto livello, altrimenti ti perderai per strada ;)
Come ha detto giustamente Fek l'argomento è vastissimo ed è progredito enormemente da quando sono state gettate le "basi".
Se parti da 0 potresti buttare giù codice per mesi senza porti il problema di fare le ombre.

PS: i libri in italiano dagli fuoco quindi buttali dalla finestra. ce ne sono parecchi in eng ma non ricordo i titoli...

PGI-Bis
21-05-2010, 18:12
Mi sapete consigliare dei manuali per masochisti come me?

Io avevo iniziato a leggere un po' di tempo fa 3d game engine design. E' una ribollita di palle eccezionale ma ha un che di quasi pratico (almeno a partire dal capitolo 4).

Mathematics for 3d game programming and computer graphics è un Frullamentus genitalis a livelli mai visti ma anche qui si riesce a cavarne qualcosa di concreto in modi insospettabili.

Lanus91
21-05-2010, 21:51
Io avevo iniziato a leggere un po' di tempo fa 3d game engine design. E' una ribollita di palle eccezionale ma ha un che di quasi pratico (almeno a partire dal capitolo 4).

Mathematics for 3d game programming and computer graphics è un Frullamentus genitalis a livelli mai visti ma anche qui si riesce a cavarne qualcosa di concreto in modi insospettabili.
Grazie, li ho cercati subito su Amazon. Del secondo c'è la nuova edizione che è più recente.
Il primo invece è fermo al 2000, non è che rischio di trovare dei concetti obsoleti? So che 10 anni nel mondo dei videogiochi sono moltissimi.
Ah ho trovato anche questo (http://www.amazon.com/exec/obidos/ASIN/1558607323/ref=nosim/gamedev)che sembra interessante, anche se dovrebbe essere un acquisto successivo.
Anche questo (http://www.amazon.com/exec/obidos/ASIN/1556229119/ref=nosim/gamedev)sembra ottimo per iniziare lo consiglia anche gamedev.

i libri in italiano dagli fuoco quindi buttali dalla finestra.
eheh fanno così schifo?
Certo il parco titoli inglese è veramente immenso, altro che quello italiano. Però anche lì ci saranno buoni prodotti e non, mi servirebbe sapere un titolo con il quale posso procedere sicuro all'acquisto, anche perchè non costano pochissimo.

Ah una curiosità... ma le animazioni di solito si fanno con l'editor 3D, o vengono fatte con qualche algoritmo via script?

Altra curiosità. Voi come avete iniziato? Avete frequentato corsi, avete utilizzato i tutorial su internet, avete comprato libri o altro..

PGI-Bis
22-05-2010, 00:36
Le animazioni le fai con l'editor. E non ti dico che bellezza.

Il 3D math primer l'ho letto, non è che sia fatto male, anzi, però non è chi ti aiuti molto. Rispetto al mathematics for 3d game etc. ha dentro le implementazioni delle classi C++ per le mesh ma non quella per le collisioni.

A prescindere nè con l'uno nè con l'altro ci fai un motore grafico, sono troppo astratti.

Quell'altro più vecchio ti guida nella creazione di un tuo motore 3d (almeno nella prima parte, a un certo punto ho smesso di leggerlo per noia).

Non so se ce ne siano di più aggiornati, immagino di sì, ma io ho letto solo quello - e neanche tutto.

mux85
22-05-2010, 09:14
se vuoi usare opengl ma con c# invece di c++ ci sono vari wrapper in giro. tipo opentk, ti permette di programmare puramente a oggetti. se invece ti accorgi che preferisci concentrarti sul creare un gioco invece che il motore grafico e tutte le altre cose complicate che ci stanno sotto (che tipicamente fanno desistere un po' tutti) la scelta consigliata è udk

gugoXX
22-05-2010, 12:31
E' l'anniversario di PacMan.
Perche' per iniziare non provi a fare un bel PacMan 2D?

Lanus91
22-05-2010, 13:56
nè con l'uno nè con l'altro ci fai un motore grafico, sono troppo astratti.

Ma di norma, chi sa fare engine grafici, come ha fatto ad imparare se neanche leggendo vari libri sull'argomento si acquisiscono i concetti necessari?
A questo punto mi sembra che da autodidatta sia quasi impossibile da imparare.

se vuoi usare opengl ma con c# invece di c++ ci sono vari wrapper in giro. tipo opentk, ti permette di programmare puramente a oggetti. se invece ti accorgi che preferisci concentrarti sul creare un gioco invece che il motore grafico e tutte le altre cose complicate che ci stanno sotto (che tipicamente fanno desistere un po' tutti) la scelta consigliata è udk

Da quello che ho sentito in giro, con le ultime versioni (9 e soprattutto 10 e 11) DirectX ha surclassato OpenGL e la tendenza per il futuro non sembra preannunciare inversioni del fenomeno, quindi preferirei imparare qualcosa che poi mi tornerà utile anche in futuro. E' vero, le OpenGL possono essere utilizzate su più sistemi operativi, ma, guardando in faccia la realtà, la maggior parte degli utenti ha windows e non è un problema che incida in maniera pesante. Certo la mia decisamente non è la mentalità più consona ad abbattere il monopolio microsoft, ma sicuramente è la più pragmatica. Ma forse potrei sbagliarmi.

E' l'anniversario di PacMan.
Perche' per iniziare non provi a fare un bel PacMan 2D?
eheh, qualche anno fa ho fatto qualcosa del genere. Avevo utilizzato le SDL per fare un giochino di corse in 2D. Ora vorrei passare al livello successivo :D

Comunque una cosa che mi piace davvero molto è realizzare qualche programma e poi cercare sempre di migliorarlo, mutuando un termine dslla poesia mi piace fare laborem limae. Voi che ne pensate, non lo trovate bellissimo? Certo forse è un po' contro tendenza, dato che il mercato richiede solo un buon rapporto qualità/velocità e non qualcosa di perfetto. Però sarebbe un altro argomento importante da discutere.
Ma sto andando fuori tema.
La cosa principale è che vorrei realizzare questo videogioco. Siccome penso che sia anche un esperimento didattico utile ad ampliare le mie conoscenze, vorrei partire dalle basi. A questo punto una libreria grafica e costruire il resto da me. Per farlo ho bisogno di molte conoscenze. Come fare per acquisirle? Non mi interessa tanto la velocità di apprendimento o altro, quello che mi interessa è che poi possa creare un engine consapevolmente e non ammucchiando un insieme di algoritmi di cui non capisco nulla e che magari ho rubacchiato qua e là su vari siti. Posso iniziare con quello consigliatomi da PGI-bis "3d game engine design"? O mi consigliate di partire da ancora prima, ovvero con quell'altro che tratta più specificatamente della matematica necessaria (premettendo che io non la so)?

P.S.: Dovrebbero fare un bel tomo di 5000 pagine: Guida definitiva alla creazione di engine 3D. Così uno ha le idee chiare su cosa fare per entrare nel settore. :D

PGI-Bis
22-05-2010, 14:19
Io adesso uso linux, quindi tu userai opengl, poche balle. :D.

Ma di norma, chi sa fare engine grafici, come ha fatto ad imparare se neanche leggendo vari libri sull'argomento si acquisiscono i concetti necessari?
A questo punto mi sembra che da autodidatta sia quasi impossibile da imparare.

Per esperienza posso dirti che per qualsiasi cosa fattibile che c'è sempre un libro in cui c'è scritto come si faccia: lo becchi, lo studi e la sai fare anche tu.

Il problema è azzeccare il libro o la combinazione di libri e avere tempo e pazienza.

Il 3D math eccetera è un bellissimo libro e ci sono un sacco di cose interessanti ma anche leggendolo da capo a piedi non sei in grado di scrivere un motore 3d più di quanto non lo fossi prima di leggerlo. Dentro c'è di tutto, dal rendering alle collisioni, dal raytracing alla fisica, dai vettori ai metodi di risoluzione numerici. Ma è un libro che propone singole tecniche. Vuoi creare una normal map partendo da una texture 2d? C'è l'algoritmo. Vuoi triangolare un poligono? C'è l'algoritmo. Ombre in tempo reale? Algoritmo.
Vuoi scrivere il tuo motore 3d? Ti attacchi. Che prima di inviare i dati sulle geometrie il motore 3D cerchi di eliminare quanti più poligoni possibili può anche avere un senso ma al PC non puoi dirgli "ok, adesso elimina i poligoni che non servono", devi iniziare con "in principio era la terra e venne la luce la notte eccetera eccetera".

Il vecchio (di cui senz'altro occorrerebbe cercare una versione meno vetusta) ti piglia per mano e ti dice: ok, il motore ha un ciclo, dentro questo ciclo attraversa un albero, questo albero è fatto di nodi, i nodi possono essere x y, z, quando incontri un nodo x fa questo, quando incontra un nodo y fa quest'altro, eccetera eccetera.

deadlyomen17
22-05-2010, 14:34
Da quello che ho sentito in giro, con le ultime versioni (9 e soprattutto 10 e 11) DirectX ha surclassato OpenGL e la tendenza per il futuro non sembra preannunciare inversioni del fenomeno, quindi preferirei imparare qualcosa che poi mi tornerà utile anche in futuro. E' vero, le OpenGL possono essere utilizzate su più sistemi operativi, ma, guardando in faccia la realtà, la maggior parte degli utenti ha windows e non è un problema che incida in maniera pesante. Certo la mia decisamente non è la mentalità più consona ad abbattere il monopolio microsoft, ma sicuramente è la più pragmatica. Ma forse potrei sbagliarmi.

OpenGL, soprattutto la versione 4.0, è decisamente potente, e non è così immediato dire che DirectX sia meglio (o peggio).
Inoltre per il livello a cui lavorerai tu non credo proprio riuscirai a notare differenze.
Non di meno, OpenGL è ampiamente usato anche in ambienti diversi dal gaming (anzi, nel gaming non è molto usato, rispetto a DirectX), quindi credo ti tornerebbe più utile imparare questa tecnologia che non quella Microsoft.
Infine, ma non per importanza, OpenGL è uno standard aperto, mentre DirectX è un'API proprietaria


Comunque una cosa che mi piace davvero molto è realizzare qualche programma e poi cercare sempre di migliorarlo, mutuando un termine dslla poesia mi piace fare laborem limae. Voi che ne pensate, non lo trovate bellissimo? Certo forse è un po' contro tendenza, dato che il mercato richiede solo un buon rapporto qualità/velocità e non qualcosa di perfetto. Però sarebbe un altro argomento importante da discutere.
Ma sto andando fuori tema.

si dice labor limae :D
il tuo scopo da ancora più senso alla scelta di usare uno standard libero.


La cosa principale è che vorrei realizzare questo videogioco. Siccome penso che sia anche un esperimento didattico utile ad ampliare le mie conoscenze, vorrei partire dalle basi. A questo punto una libreria grafica e costruire il resto da me. Per farlo ho bisogno di molte conoscenze. Come fare per acquisirle? Non mi interessa tanto la velocità di apprendimento o altro, quello che mi interessa è che poi possa creare un engine consapevolmente e non ammucchiando un insieme di algoritmi di cui non capisco nulla e che magari ho rubacchiato qua e là su vari siti. Posso iniziare con quello consigliatomi da PGI-bis "3d game engine design"? O mi consigliate di partire da ancora prima, ovvero con quell'altro che tratta più specificatamente della matematica necessaria (premettendo che io non la so)?

sicuramente prima dovrai acquisire le basi matematiche necessarie.
c'è bisogno di conoscere l'algebra e la geometria anche "solo" per usare un engine, figurati per crearlo...

Lanus91
22-05-2010, 14:35
Io adesso uso linux, quindi tu userai opengl, poche balle. :D.
:asd:

Il vecchio (di cui senz'altro occorrerebbe cercare una versione meno vetusta) ti piglia per mano e ti dice: ok, il motore ha un ciclo, dentro questo ciclo attraversa un albero, questo albero è fatto di nodi, i nodi possono essere x y, z, quando incontri un nodo x fa questo, quando incontra un nodo y fa quest'altro, eccetera eccetera.

Ok, ora ho capito. Leggerò un libro del genere per farmi un'idea di come si sviluppa un engine, e poi prenderò altri libri di approfondimento per i vari algoritmi e tecnologie che mi saranno necessari. Ora tutto sta nel trovare un libro recente simile a questo che mi hai suggerito e che magari sia il più chiaro possibile (in inglese sono una frana :D ).

si dice labor limae :D
ahah ma io l'ho addirittura declinato all'accusativo xD

Comunque si, dovrò pensarci su se utilizzare l'una o l'altra libreria grafica, secondo me è molto importante come cosa.

sicuramente prima dovrai acquisire le basi matematiche necessarie.
c'è bisogno di conoscere l'algebra e la geometria anche "solo" per usare un engine, figurati per crearlo...
A questo punto penso che, nonostante non mi insegni nulla di engine, il libro di matematica sia un passo obbligato. Ma forse sulla parte prettamente matematica posso anche trovare un buon manuale in italiano.

pabloski
22-05-2010, 15:06
Da quello che ho sentito in giro, con le ultime versioni (9 e soprattutto 10 e 11) DirectX ha surclassato OpenGL e la tendenza per il futuro non sembra preannunciare inversioni del fenomeno, quindi preferirei imparare qualcosa che poi mi tornerà utile anche in futuro. E' vero, le OpenGL possono essere utilizzate su più sistemi operativi, ma, guardando in faccia la realtà, la maggior parte degli utenti ha windows e non è un problema che incida in maniera pesante. Certo la mia decisamente non è la mentalità più consona ad abbattere il monopolio microsoft, ma sicuramente è la più pragmatica. Ma forse potrei sbagliarmi.


la scelta non è così ovvia come potrebbe sembrare e per vari motivi

opengl non è inferiore a directx, anzi opengl 4 e directx 11 sono alla pari

se il tuo scopo attuale è di creare un gioco per windows dimostrativo, per studio, ecc... puoi benissimo restare sulle directx così che usi c#, developer studio per scrivere il codice, ecc...

però tieni presente che prima o poi, se hai intenzione di sviluppare giochi in futuro, ti troverai le opengl tra i piedi....

opengl è usato sui mac, su linux, su ps3, wii e tutti gli smartphone

praticamente directx al di fuori di windows e xbox non esiste

come inizio è conveniente perchè non devo andare a cercare documentazione in giro, ma rimane il fatto che se la tua professione sarà questa allora opengl è un must

Tommo
22-05-2010, 16:55
Oh no sono usciti dall'antro i fanboy OpenGL, scappiamo :asd:

Allora, tiriamo fuori la solita ramanzina:

-PS3 non usa OpenGL. OpenGL è realizzata quale wrapper di LibGCM, e qualunque sviluppatore non stia facendo cagate (leggasi: tutti) usano quest'ultima.

-Wii non usa OpenGL. Usa una libreria dalla sintassi simile ma scritta e decisa completamente all'interno di Nintendo. Ogni somiglianza è casuale.

Praticamente OpenGL al di fuori di piattaforme dotate di sistema operativo non esiste.

Inoltre OpenGL NON E' aperta. Basta capire come viene decisa e da chi, per capire che DirectX e OpenGL subiscono pressioni esattamente allo stesso modo e dalle stesse aziende.
E per di più OpenGL non è "free software" "as in speech" perchè il codice sorgente dei singoli driver e delle specifiche implementazioni di OpenGL è CHIUSO, e l'utente finale non ha alcun potere su di esso.

In finale quello che dovrebbe far decidere su quale API utilizzare dovrebbe essere unicamente la facilità di utilizzo; e quella pende pesantemente a favore di DirectX sui sistemi windows.

In più, tutto questo discorso è del tutto inutile ai fini di Lanus91, perchè imparare un'API non serve a niente.
Quello che è difficile oggi sono i concetti di alto livello dietro lo sviluppo di un motore grafico (che a sua volta è una minima parte di un motore da gioco) e quelli non si apprendono di certo buttando 4 vertici a schermo in immediate mode.

Per quanto mi riguarda ho imparato tutto usando e studiando l'architettura di Ogre3D, seguendo forums e leggendo articoli di approfondimento qua e la e scrivendo un rasterizzatore software.
infatti non saprei consigliare un libro perchè non ne ho letto nessuno :asd:
Ciò non toglie che con le mie basi ho "imparato opengl" e scritto un rozzo motore grafico in poco più di 2 giorni.
Però, poi ci sono voluti altri 24 giorni per finire il gioco.

Vi prego, smettete di dire "voglio fare un gioco = imparo un'API". NON HA SENSO.

/rant

Lanus91
22-05-2010, 17:50
Vi prego, smettete di dire "voglio fare un gioco = imparo un'API". NON HA SENSO.

Eh infatti da quello che ho capito il problema sono più gli algoritmi che non le librerie utilizzate. E pensare che prima mi stavo arrovellando perchè credevo di dover inventare la parte degli algoritmi tutta da solo. :D
Invece c'è già la pappa pronta, però almeno la voglio capire.
Tu hai imparato in modo empirico lavorando con un motore grafico e vedendo com'è stato realizzato. Non sarà l'approccio più sistematico, ma credo che sia il più comune. La mia paura è che così facendo, anche perchè non conosco la matematica necessaria, potrei non capirci nulla semplicemente analizzando il codice di un motore grafico. Un'altra paura è che magari imparo tutte le cose in modo frammentato senza poi farle mie in modo da saperle riutilizzare, cioè non sapendole riutilizzare consapevolmente e senza capire quel che c'è dietro. Ma forse è tutta questione di pratica.
Quello che intendevo fare era bypassare questa fase, od almeno ridurla leggendo un manuale sull'argomento, ma da quanto ho capito alla fine dovrò anch'io fare in questo modo. :D

Tommo
22-05-2010, 18:47
Non sto dicendo che il mio percorso è stato il più veloce cmq, ho iniziato nel 2006 :asd:
Con un buon libro da seguire nel fare pratica sarebbe stato più veloce, poco ma sicuro... però la pratica rimane imprescindibile, fare giochi è e rimane un'attività da smanettone incallito :D

Non ci sono risultati certi, solo risultati "divertenti", così come non ci sono algoritmi sbagliati ma algoritmi che "funzionano", e la capacità di trovare compromessi (fare schifezze? :D) è fondamentale.
Come dire, se non si può cambiare l'algoritmo si cambia il risultato voluto.

Poi quanto vuoi approfondire le meccaniche di sfondo dipende da te: se ti interessa più creare buoni motori grafici/fisici/quant'altro dovrai seguire un approccio più scientifico e di studio, perchè ci sono una serie di principi di progettazione dietro.. e lascia perdere l'idea di completare un gioco.

invece se ti interessa creare giochi puoi usare circa qualsiasi cosa all'inzio, e ci sono moltissimi motori di alto livello (Unity, Ogre, Pygame, UDK, Flash, eccetera ) che astraggono praticamente qualsiasi cosa, compresa la tanto temuta "matematica"... però sarai considerabile uno smanettone :asd:

pabloski
22-05-2010, 19:07
Oh no sono usciti dall'antro i fanboy OpenGL, scappiamo :asd:

macchè nemmeno mi occupo di grafica :D


-PS3 non usa OpenGL. OpenGL è realizzata quale wrapper di LibGCM, e qualunque sviluppatore non stia facendo cagate (leggasi: tutti) usano quest'ultima.

-Wii non usa OpenGL. Usa una libreria dalla sintassi simile ma scritta e decisa completamente all'interno di Nintendo. Ogni somiglianza è casuale.


ma pure ps3 usa psgl che è un derivato di opengl e la sintassi è simile

però sarai d'accordo che conoscendo opengl è più facile apprendere sia psgl che l'api grafica di wii

però rimane il fatto che tutti i device mobili non windows usano opengl es

comunque la si giri opengl esiste ed è molto usato

Tommo
22-05-2010, 20:03
Nah, PSGL come ho detto è un wrapper di LibGCM, quindi chi ci lavora davvero usa direttamente LibGCM per una questione di flessibilità e pretstazioni...

Cmq si volevo solo sfatare questi miti che si vedono ripetuti a pappagallo ogni volta che si parla di OpenGL, in altre sezioni del forum mi sono pure visto dire che mi sbaglio.

Poi, OpenGL è decisamente molto usato e sarà usato sempre di più, e personalmente ritengo che DirectX rimarrà "schiacciato" tra schede video potentissime che renderizzano in CUDA/OpenCL vs embedded che usano OpenGL tra qualche anno...
Ma tanto, se sai OpenGL impari directx in 2 minuti e viceversa, quindi continuo a credere che per iniziare una vale l'altra, se proprio devi essere masochista :asd:

cdimauro
23-05-2010, 04:50
Aggiungiamo pure che OpenGL è una libreria per la sola grafica, mentre per sonoro, input, networking, e video deve affidarsi ad altra roba, mentre le DirectX coprono tutto ciò che serve nella realizzazione di un videogioco.

Inoltre sono API:
- più semplici da utilizzare;
- con più documentazione;
- con supporto da parte di Microsoft;
- (dalla 10) non prevedono più le estensioni, ma un set unico a cui tutti i produttori devono attenersi (al contrario, OpenGL ne fa ancora uso e ciò comporta la creazione di code path diversi da usare per sfruttare le funzionalità proprietarie dei produttori di GPU, in attesa che il comitato le ratifichi ufficialmente); modello "console", per intenderci.

Sono i motivi per cui uno sviluppatore Windows è decisamente più produttivo con le DirectX, e difatti da tempo quasi tutti hanno abbandonato le OpenGL.

javaboy
23-05-2010, 10:54
Questo libro è molto interessante e anche piacevole da leggere:
http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135/ref=sr_1_1?ie=UTF8&s=books&qid=1274608210&sr=8-1

E' scritto da uno dei programmmatori di uncharted2.

Personalmente ti consiglio di stare alla larga da opengl. Il 90% della documentazione che trovi online è deprecata e perderesti troppo tempo. Te lo dice uno che ci guadagnava il pane fino a qualche mese fa...

javaboy
23-05-2010, 11:08
come inizio è conveniente perchè non devo andare a cercare documentazione in giro, ma rimane il fatto che se la tua professione sarà questa allora opengl è un must

Anche le rare volte in cui si decide di fare una versione linux o Mac spesso la versione windows è comunque fatta in directx. Senza usare librerie aggiuntive come glew non è così automatico il porting su linux. Senza considerare poi tutte le altre componenti del gioco.

gugoXX
23-05-2010, 11:09
XNA con C#, e ti diverti sia prima che dopo.

cdimauro
23-05-2010, 11:21
Anche Python può aiutare con XNA: Integrating and using Iron Python in a XNA Game (http://www.pycon.it/conference/talks/integrating-and-using-iron-python-in-a-xna-game)

Guardate il video che è spettacolare. :cool:

Lanus91
23-05-2010, 11:38
Questo libro è molto interessante e anche piacevole da leggere:
http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135/ref=sr_1_1?ie=UTF8&s=books&qid=1274608210&sr=8-1

Sembra un libro che tratta tutti i vari argomenti. Ci sono anche esempi dentro o si limita a dare una spiegazione teorica?

Avevo trovato anche questo (http://www.amazon.com/gp/product/1598220535/ref=pd_luc_hashrec_03_01), che ha un approccio pratico simile a quello che diceva PGI-bis. Però utilizza le DirectX 10 ed io al momento sto su XP. L'edizione precedente utilizza le DX9, però è molto più datata.

XNA con C#, e ti diverti sia prima che dopo.
Una volta imparato a fare un motore grafico, penso che utilizzare questi strumenti sia d'obbligo per un programmatore produttivo. Però per me che non ne so niente sarebbe come utilizzare delle formule matematiche senza conoscerne la dimostrazione. Poi certo realizzerei il mio videogioco, ma se in futuro ne volessi fare un altro e cambiassero gli strumenti di sviluppo, io mi ritroverei a partire da zero, o quasi.

gugoXX
23-05-2010, 11:57
Una volta imparato a fare un motore grafico, penso che utilizzare questi strumenti sia d'obbligo per un programmatore produttivo. Però per me che non ne so niente sarebbe come utilizzare delle formule matematiche senza conoscerne la dimostrazione. Poi certo realizzerei il mio videogioco, ma se in futuro ne volessi fare un altro e cambiassero gli strumenti di sviluppo, io mi ritroverei a partire da zero, o quasi.

Mah.

Penso che la quasi totalita' delle persone che sviluppano per web non sappia cosa siano i layer di rete ISO-OSI, ne' cosa sia TCP, ne cosa sia IP, ne HTTP, etc.
Pero' sviluppa per web e magari lo fa anche tanto bene.
A ciascuno i suoi spazi. A parte alcuni aspetti di base per i quali la matematica e' a livello di scuola superiore, direi che per il resto se ne puo' fare a meno e cnosiderarlo una black-box.

XNA e simili, produttivo fino a che si sta sul piccolo comunque. Non penso di sbagliare se dico che nessuna software house dedita ai videogiochi usa XNA o similari.
Ma se si e' da soli o in pochi e' una manna dal cielo.

Devi comunque decidere prima il tuo target, se e' un videogioco per cellulari, per IPhone, per Mac, per PC, e poi si decide la tecnologia. Non prima.
Se il target e' PC, con XNA resta fuori quello 0.002% di persone che usa Linux e NON ha Windows, e a cui piacciono i giochi. Un sottoinsieme dabbero piccino worldwide.
Direi che puoi lasciarli fuori, guadagnando una piu' alta probabilita' di portare a termine il lavoro :)

javaboy
23-05-2010, 12:43
Sembra un libro che tratta tutti i vari argomenti. Ci sono anche esempi dentro o si limita a dare una spiegazione teorica?

C'è un pò di codice c++ ma niente progetti da compilare pronti all'uso. Se vuoi un libro che ti dia un minimo di basi e contenga il codice di un semplice engine
su cui mettere le mani, questo non è il libro giusto. E' un libro eccezionale se invece vuoi avere un'ottima formazione teorica sull'argomento. Buona parte degli altri libri ti guidano nella creazione di un engine giocattolo, questo è un libro scritto da un professionista del settore ed è indirizzato a studenti, programmatori junior del settore e programmatori senior che essendo specializzati in un particolare ambito vogliono sviluppare una visione d'insieme.
Di gran lunga il miglior libro che abbia letto sull'argomento.
Se vuoi invece un bel libro sulla grafica non c'è niente di meglio di real time rendering di moller, haines, hoffman ma questo è già più impegnativo.


Avevo trovato anche questo (http://www.amazon.com/gp/product/1598220535/ref=pd_luc_hashrec_03_01), che ha un approccio pratico simile a quello che diceva PGI-bis. Però utilizza le DirectX 10 ed io al momento sto su XP. L'edizione precedente utilizza le DX9, però è molto più datata.

Ho sia questo che advanced....ora non li ho sotto mano però, ricordo che uno dei due è fatto parecchio male, l'altro potrebbe essere utile.

javaboy
23-05-2010, 12:54
Grazie, li ho cercati subito su Amazon. Del secondo c'è la nuova edizione che è più recente.
Il primo invece è fermo al 2000, non è che rischio di trovare dei concetti obsoleti? So che 10 anni nel mondo dei videogiochi sono moltissimi.
Ah ho trovato anche questo che sembra interessante, anche se dovrebbe essere un acquisto successivo.
Anche questo sembra ottimo per iniziare lo consiglia anche gamedev.
Te li sconsiglio entrambi. Il primo perchè è veramente troppo pesante, il secondo invece non lo conosco ma non mi sembra il caso di prendere un libro così specialistico. Ti basta poco per iniziare e quel poco lo trovi nel libro che ti ho consigliato. Se inizi a combattere con quaternioni e altre amenità rischi di stufarti prima di iniziare.
Fondamenti di grafica tridimensionale interattiva invece te lo consiglio.

javaboy
23-05-2010, 13:04
Mah.
Penso che la quasi totalita' delle persone che sviluppano per web non sappia cosa siano i layer di rete ISO-OSI, ne' cosa sia TCP, ne cosa sia IP, ne HTTP, etc.

Nel campo dei videogiochi è un pò diverso. Ci sono vincoli di performance strettissimi ed è importante sapere come è implementata la NEW in c++ o come funziona una GPU.

Lanus91
23-05-2010, 13:22
Mah.
Penso che la quasi totalita' delle persone che sviluppano per web non sappia cosa siano i layer di rete ISO-OSI, ne' cosa sia TCP, ne cosa sia IP, ne HTTP, etc.
Pero' sviluppa per web e magari lo fa anche tanto bene.
A ciascuno i suoi spazi. A parte alcuni aspetti di base per i quali la matematica e' a livello di scuola superiore, direi che per il resto se ne puo' fare a meno e cnosiderarlo una black-box.
Appunto perchè è nera, quella scatola attirerà sempre la mia attenzione. :D
E' la sete di conoscenza che non posso ignorare. Poi sì, posso usare anche formule di matematica senza conoscerne le dimostrazioni, ma poi mi verrebbe sempre la curiosità di sapere il perchè.
Sia un muratore che un ingegnere sanno fare una casa. Ma il secondo la fa con cognizione di causa e per me è un fattore importante.

C'è un pò di codice c++ ma niente progetti da compilare pronti all'uso. Se vuoi un libro che ti dia un minimo di basi e contenga il codice di un semplice engine
su cui mettere le mani, questo non è il libro giusto. E' un libro eccezionale se invece vuoi avere un'ottima formazione teorica sull'argomento. Buona parte degli altri libri ti guidano nella creazione di un engine giocattolo, questo è un libro scritto da un professionista del settore ed è indirizzato a studenti, programmatori junior del settore e programmatori senior che essendo specializzati in un particolare ambito vogliono sviluppare una visione d'insieme.
Di gran lunga il miglior libro che abbia letto sull'argomento.
Allora prendo sicuramente questo, perchè mi serviva proprio una visione d'insieme per cominciare.



Se vuoi invece un bel libro sulla grafica non c'è niente di meglio di real time rendering di moller, haines, hoffman ma questo è già più impegnativo.
Lo prenderò come secondo libro per approfondire.


Ho sia questo che advanced....ora non li ho sotto mano però, ricordo che uno dei due è fatto parecchio male, l'altro potrebbe essere utile.
Poi se ti ricordi fammi sapere quale dei due è da buttare, perchè penso che dopo la teoria mi serva qualcosa del genere per passare alla pratica. :D

Ti ringrazio i tuoi consigli mi sono stati molto utili.

PGI-Bis
23-05-2010, 16:08
Aggiungerei a questo punto che non ci sono più le mezze stagioni e la torta come la faceva mia nonna non la fa più nessuno.

cdimauro
23-05-2010, 19:20
"Con le OpenGL ci viene buona la zuppa" (cit.). :O :p

pabloski
23-05-2010, 19:28
"Con le OpenGL ci viene buona la zuppa" (cit.). :O :p

beh pure gli smartphone vengono su bene con opengl :D

Mattyfog
23-05-2010, 21:55
Raga, anche se mi intrometto senza leggere, ma per C# esiste un engine?
XNA se non sbaglio fa da intermediario con le DirectX ma non è un vero engine giusto??

PGI-Bis
23-05-2010, 22:20
C'è un port di Ogre

http://axiom3d.net/wiki/index.php/Main_Page

cdimauro
24-05-2010, 07:10
beh pure gli smartphone vengono su bene con opengl :D
Era soltanto una battuta parafrasando il PGI-Bis dei bei tempi winzozziani. ;)

PGI-Bis
24-05-2010, 10:39
Calma e gesso: io sono un official windows fanboy (be', fanelder più che boy ma non stiamo qui a cercare il pelo nell'uovo). Ma anche uno zelota della Grande Finestra non può che avere a cuore la programmazione cross-platform. Che vale anche quando l'OS è di uno stesso produttore. Ho ancora in uso certi catafalchi che scrissi ai tempi di Windows 98 ...

javaboy
24-05-2010, 19:24
Il libro da prendere è quello di luna.

Lanus91
24-05-2010, 20:46
Grazie mille.
Ora ho in lista 3 libroni da 800 pagine l'uno. Forse avevate ragione: sono proprio masochista. :D

pabloski
24-05-2010, 21:01
Grazie mille.
Ora ho in lista 3 libroni da 800 pagine l'uno. Forse avevate ragione: sono proprio masochista. :D

ma no, è come leggere il Signore degli Anelli :D

marco.r
24-05-2010, 21:03
Grazie mille.
Ora ho in lista 3 libroni da 800 pagine l'uno. Forse avevate ragione: sono proprio masochista. :D

col dettaglio che alla fine ne saprai di Grafica 3D, ma solo in parte di un videogioco 3D :P

Lanus91
24-05-2010, 21:46
ma no, è come leggere il Signore degli Anelli :D
magari :D

col dettaglio che alla fine ne saprai di Grafica 3D, ma solo in parte di un videogioco 3D :P
eh anche questo è vero. Però è l'ambito che più mi preoccupava era quello. Il resto bene o male lo posso inventare. :D
Cosa mi consiglieresti di approfondire?