|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2003
Città: Castellammare di Stabia (Na)
Messaggi: 2046
|
Quale linguaggio per apprendere l'arte della programamzione videoludica?
Premetto che è una cosa che più che altro vorrei imparare per semplice passione e curiosità, perchè essendo appassionato di VG, vorrei capire com'è che viene gestito, cos'è che genera i poligoni, le texture, i moviementi di un personaggio etc etc..
Dal punto di vista della programmazione ho qualche esperienza ma per il rendering grafico assolutamente no! Vorrei capire da dove iniziare. Cercando su google mi è parso di capire che i giochi vengono solitamente realizzati con C++ che a sua volta si appoggia alle DirectX. C++ è un linguaggio che va bene per realizzare programmi tipo gestionali, ma per realizzare invece applicazioni grafiche complesse, come appunto un videogioco, deve per forza appoggiarsi alle librerie DX. Quindi per prima cosa dovrei avere un'infarinatura generale sul C++, poi approfondire il discorso sulla loro interpellazione da parte del C++. Confermate? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Non è un problema di linguaggio, dovresti studiarti come funziona il rendering 3D. Il linguaggio viene dopo ed è una scelta pratica, dovuta alla necessità di avere elevate performance.
DirectX non è l'unica libreria 3D, c'è anche Opengl che è altrettanto diffusa. Puoi cominciare da qui http://nehe.gamedev.net/ studiandoti i legacy turorials. A quel punto avrai un'idea di come funziona il processo indipendentemente dalla libreria grafica usata. Il linguaggio è davvero l'ultima cosa e nessun linguaggio di programmazione supporta nativamente il 3D, ma si appoggiano tutti a librerie esterne. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2006
Messaggi: 3808
|
se ti dicessi che c'è più algebra lineare che programmazione nel mondo videoludico, ci crederesti?
Ultima modifica di Freaxxx : 05-08-2011 alle 13:31. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Per non parlare poi di come vengono realizzati e gestiti gli asset grafici, quella sì che è la parte effettivamente "artistica" della questione.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Dec 2006
Messaggi: 3808
|
|
![]() |
![]() |
![]() |
#6 |
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21778
|
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Dec 2006
Messaggi: 3808
|
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Quote:
Ci sono un mucchio di modi per fare un videogame, e dipende tutto da cosa vuoi ottenere. Cè Flash, FlashPunk, Unity, C++/OpenGL, C++/DX, C++/Ogre3D, ObjC/OpenGL, Python, Cocos2D, UDK, C#/XNA e che cavolo, pure Java ![]() Ogni set di tool ha diversi punti di forza, diversi costi, diversi obiettivi. Ci sono quelli semplificati adatti al 2D (cocos, flash) quelli low level adatti a tutto (C++/OGL/DX), e un bel numero di vie di mezzo. Quello che devi decidere quindi è prima di tutto cosa vuoi tu, quindi se vuoi imparare "come lo fanno i pro", oppure vedere un tuo gioco funzionante, oppure fare soldi con un gioco qualsiasi etc... parti dal presupposto che imparare come fanno i pro E ANCHE fare qualcosa di utile nei primi mesi/anni è impossibile. Nello specifico C++ è la cosa più difficile in assoluto (senza andare nei linguaggi esotici ![]() Anche C# + XNA te lo sconsiglio, perchè viene spacciato per un game engine ma in realtà è un'API a basso livello (devi gestirti matrici e shader a mano, per dire). Io credo che per imparare si debba prima capire il problema e capire come l'hanno risolto gli altri, quindi ti consiglierei di imparare le cose più semplici prima, come Flash + Flixel o Flashpunk o Python + Pygame/Pyglet/Cocos2D, e quando hai capito come si fa un gioco, approfondisci. Sbattere la faccia contro C++ senza sapere nemmeno dove devi andare non ha mai aiutato nessuno ![]() @Freaxxx: non ci crederebbe e farebbe proprio bene ![]() Ultima modifica di Tommo : 05-08-2011 alle 14:12. |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Dec 2006
Messaggi: 3808
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Aug 2003
Città: Castellammare di Stabia (Na)
Messaggi: 2046
|
Quote:
Poi se proprio ci tengo approfondire come i PRO... partire subito con l'obiettivo di imparare da PRO è assurdo! |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
C'è la possibilità di affrontarlo dal lato "matematico" oppure da un un punto di vista più "alto". Se si parte con directx o opengl, allora si sta lavorando ad un livello abbastanza basso ed è fondamentale conoscere la logica che sta dietro la creazione, gestione e trasformazione degli oggetti 3D. C'è pure la grafica 2D da cui si può partire e che è decisamente più potabile rispetto alla controparte 3D. Ma rimane il punto che il linguaggio è quello che c'entra di meno in tutto questo. |
|
![]() |
![]() |
![]() |
#12 | ||
Senior Member
Iscritto dal: Aug 2003
Città: Castellammare di Stabia (Na)
Messaggi: 2046
|
Quote:
Cmq sto dando un'occhiata a Flixel, siccome in testa ho un po di casino, partendo dal presupposto che conosco abbastanza il funzionamento di AS3, facciamo chiarezza prendendo proprio questo come esempio: L'AS3 sta Flixel come C++ sta a dirextx/openGL? E' di questo che stiamo parlando? In flash queste classi tipo Flixel (che non conoscevo, fino ad oggi ho utilizzato solo le caurina e greensock per degli effetti di transizione) sono una sorta di librerie esterne a cui aggiungo per applicare effetti a determinati oggetti. Questo perchè Flash non prevede questo tipo di effetti di default. Quindi è questo il concetto del rapporto tra il C++ e DirectX? Poi ho ancora un altro dubbio circa questo punto: Quote:
![]() AGGIUNGO: ad esempio, nella grafica 2D di flash ho due possibilità per creare un semplice quadrato dal colore uniforme: realizzarlo tramite codice oppure tramite l'editor di Flash.. Nel primo caso in AS3 inizializzo uno shape di tipo rettangolo e comunico la destinazione che dovrà avere ciascun lato della figura, nel secondo ci metto due secondi a farlo tramite l'apposito tool dell'interfaccia flash. Ultima modifica di American horizo : 05-08-2011 alle 15:36. |
||
![]() |
![]() |
![]() |
#13 | ||
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Quote:
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
||
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Aug 2003
Città: Castellammare di Stabia (Na)
Messaggi: 2046
|
bhe quindi la mera "programmazione" in cosa si applica nel contesto della creazione di elementi 3D poligonari? Avrei capito se non ci fossero stati editor appositi come maya, in quel caso sarebbe stato un inferno e di sicuro i vg oggi avrebbero tutt'altra qualità visiva
Ultima modifica di American horizo : 05-08-2011 alle 16:00. |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Quote:
![]() Le luci (senza shaders) e il "renderizzare i frame" (che intendi?) fa tutto la GPU, che c'entra la matematica lineare? Certo, i vettori sono poco meno comuni degli int nel codice... ma te la puoi cavare benissimo con una conoscenza superficiale, e di sicuro la matematica lineare non è il primo problema da risolvere. Assume un'importanza minima solo nel momento in cui stai scrivendo una tua engine, ma in finale tutto si riassume in moltiplicazioni di matrici 4x4. Conoscere la matematica lineare aiuta un sacco se ti trovi a fare grafica 3D avanzata (shaders) ma consigliarlo a qualcuno che sta a 0 è del tutto fuori luogo imo. @American: si e no. AS3 è il linguaggio come C++, e fin qui ci siamo. Poi è abbastanza diverso: DirectX è una "System API", cioè è una libreria di sistema che fornisce un'insieme di roba per il gaming, quindi grafica ma anche input, sonoro, e altro, il tutto molto a basso livello con gran trafficare di memoria e algebra lineare. Niente collisioni, fisica, salvataggi, gameplay, caricamento delle risorse etc. OpenGL è ancora peggio, perchè è un pò più spartana di DX nella parte grafica e manca completamente di tutto il resto. Flixel e Flashpunk non li ho mai usati, ma da quello che so sono game frameworks, quindi sempre librerie più o meno passive ma che idealmente forniscono ad alto livello tutto quello che ti serve per fare il gioco, quindi sprites, salvataggi, animazioni, collisioni, etc. Se dovessi fare un paragone in C++, direi che sono al livello di Ogre3D e simili. Più in alto ci sono le "game engines" cioè motori precostruiti che eseguono il tuo codice (non vengono semplicemente chiamate) e forniscono tutta la suite di tool per gli artist, fisica, collisioni, sonoro, tutto. La più potente e completa è sicuramente UDK ma è anche un casino da usare, e un'altra scelta comune è Unity3D che si scripta in C#. |
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Aug 2003
Città: Castellammare di Stabia (Na)
Messaggi: 2046
|
ok, diciamo che fixel è più user-friendly di directx, ma pur sempre di librerie esterne stiamo parlando no?
Devo capire almeno il concetto, che poi direcx sia di più basso livello rispertto a fixel è un altro discorso |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Dec 2006
Messaggi: 3808
|
e secondo te la GPU che fa se non calcolo matriciale nel 99% dei casi? e secondo te tu che programmi se non algebra lineare? Il fatto che ti viene nascosto cosa avviene, almeno usando linguaggi di alto livello, non significa che ha ragione il linguaggio di alto livello e torto quelli che hanno progettato la GPU.
|
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Aug 2003
Città: Castellammare di Stabia (Na)
Messaggi: 2046
|
Ok, e invece per il discorso della matematica lineare applicata alla questione della modellazione 3D, perchè nel documentario di god of war III presente nel disco di gioco, il team lavora con software come maya 3D per creare quelli che sono appunto i modelli poligonari del gioco? Quando e come entra in gioco l'applicazione della matematica lineare?
|
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Dec 2006
Messaggi: 3808
|
Quote:
- gli shader - i movimenti - il rendering e il calcolo di ciò che va spedito al framebuffer - le luci - i materiali qualsiasi cosa è matematica, non lo dico per dire, i migliori libri per sviluppatori sono inzuppati di matematica. ad esempio una rotazione di un oggetto qualsiasi è data da un sistema lineare di funzioni armoniche ( seno e coseno ) cosa renderizzare, cioé quale parte considerare, per poi produrre un frame, cioé una immagine in 2D, lo decidi sempre con del calcolo matriciale e proiezioni sugli assi; se tu hai una macchina su schermo messa di lungo, ad esempio, il fatto che tu veda solo 2 ruote e il fianco della macchina lo devi alla GPU che calcola la posizione dell'oggetto, calcola la posizione della telecamera, fa una proiezione dell'oggetto e te la mostra come frame. è improprio dire che quello su schermo è il tuo oggetto, è più corretto dire che è una sua proiezione. luci, materiale e tutto il resto seguono sempre leggi matematiche e valori numerici, dal colore alla forma fai tutto con la matematica. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:08.