Grafica 3D e OpenGL

carlo232
Ciao amici programmatori, da un pò sto studiando come fare applicazioni di grafica 3D, ho realizzato anche un piccolo videogioco con un omino in un labirinto tridimensionale http://digilander.libero.it/hendrix33/.

Ora vorrei fare applicazioni più serie cioè con ambienti più complessi, niente flash però, utilizzerei le librerie dell'OpenGL in C++, qualcuno ha del materiale al riguardo che potrebbe fornirmi?

Ciao e grazie in anticipo a chiunque mi sia d'aiuto :D

PS che ve ne pare del mio gioco? :D

Risposte
stellacometa
Ehy Carlo..Per l'ennesima volta rimango stupita dai tuoi programmi.. Mi insegneresti a fare programmi come quello che hai tu in 3D??

carlo232
"stellacometa2003":
Ehy Carlo..Per l'ennesima volta rimango stupita dai tuoi programmi.. Mi insegneresti a fare programmi come quello che hai tu in 3D??


Allora apro una piccola parentesi riguardo quel giochino, che ovviamente non ho fatto in C++ (altrimenti perchè chiedere aiuto :D ) ma con Visual Basic.

Per disegnare con Visual Basic è necessario usare l'oggetto picturebox, una volta scelte la dimensione il e il backcolor della picturebox si può isegnare sopra essa con queste semplici istruzioni

PictureBox1.DrawWith=D               'imposta le dimensioni del pennello che possono essere 1,2,3,4...
PictureBox1.ForeColor=vbred            'imposta il colore del pennello vbred vbblue vbyellow vbblack vbgreen...
PictureBox1.Pset(X,Y)                       'disegna un punto di coordinate X e Y
PictureBox1.Line(X1,Y1)-(X2,Y2)        'disegna un segmento con estremi di coordinate X1 Y1 e X2 Y2


ora il mio gioco funziona nel modo seguente:

La visuale dell'ambiente è determinata da due angoli t e e, per disegnare un punto di coordinate X Y Z sulla PictureBox è necessario trovare la sua prioezione ovvero le coordinate sulla PictureBox XP e YP. La geometria proiettiva ci dice che

XP = Y * Sin(t) - X * Cos(t) + 7500
YP = (Y * Cos(t) + X * Sin(t)) * Cos(e) + Z * Sin(e) + 5500


i termini 7500 e 5500 servono a centrare la visuale e sono rispettivamente la metà della larghezza e dell'altezza della PictureBox.

Ora in 3D un punto ha poca importanza, è necessario saper disegnare una superficie. Nel gioco le uniche superfici sono le pareti, per disegnare una parete è sufficiente disegnare molte linee parallele abbstanza vicine da dare un effetto di continuità. Per farlo si usa un ciclo FOR.

PictureBox1.DrawWith=5
FOR h=1 to 500 step 33
XP = Y * Sin(t) - X * Cos(t) + 7500
YP = (Y * Cos(t) + X * Sin(t)) * Cos(e) + h * Sin(e) + 5500
XP = Y * Sin(t) - (X+500) * Cos(t) + 7500
YP = (Y * Cos(t) + (X+500) * Sin(t)) * Cos(e) + h * Sin(e) + 5500
PictureBox1.line(XP1,YP1)-(XP2,YP2)
NEXT


il codice sopre disegna una parete larga 500 e alta5. è importante che per disegnare una parete si usi il numero minimo di linee possibile, per questo aumentare la larghezza del pennello, infatti ogni linea è un calcolo nel codice e quindi rallenta l'esecuzione del programma.

Il punto cruciale è il seguente la PictureBox disegna le cose nell'ordine che gli diciamo, quindi l'ultima cosa che gli facciamo disegnare la disegna "sopra" quelle che ha già disegnato.
Come dire gli oggetti che dovrebbero stare davanti non è detto che stiano davanti.

Per far si che le pareti del labirinto non si sovrappongano in strani modi è necessario disegnare prima le pareti più lontate e dopo quelle più vicine all'osservatore. Per farlo basta mettere la distanza delle pareti in un Array e poi ordinarlo in ordine crescente utilizzando due cicli FOR nidificati come nei primi esercizi che si fanno sullo studio degli Array.

Comunque nella mia pagina web metterò presto la possibilità di scaricare il codice e il progetto dei miei programmi.

Ciao Ciao :D

stellacometa
Ok grazie...se fosse per me ti direi di mettere una dispensa da cui potrei attingere tutte ste cosette!!! :-D

TomSawyer1
Le trovi su tutti i siti VB6 e in un qualsiasi manuale di VB6. Per non parlare del database di VB6, premendo F2.

stellacometa
Davvero? Hai qualche link??

anonymous_be1147
"carlo23":
vorrei fare applicazioni più serie cioè con ambienti più complessi, niente flash però, utilizzerei le librerie dell'OpenGL in C++, qualcuno ha del materiale al riguardo che potrebbe fornirmi?

In rete trovi parecchio materiale anche in italiano. In inglese è disponibile tra l'altro la guida ufficiale del programmatore, anche in formato PDF. Non è l'ultima versione ma può servire. Altra documentazione ufficiale la trovi sul sito opengl.org.


che ve ne pare del mio gioco? :D

Bello, complimenti! :D

carlo232
"anonymous_be1147":
In rete trovi parecchio materiale anche in italiano. In inglese è disponibile tra l'altro la...


Grazie per le informazioni!

Appena avrò tempo mi metterò all'opera e vedrò che riesco a fare :-D

Ciao Ciao :D

enigmagame
Ciao! :-D
Rispondo un' pò in ritardo...
Abbiamo la stessa passione... anche se io vorrei poi farne un lavoro... :D infatti per ora sto studiando all'uni, I corsi di grafica al pc li avrò il prossimo anno...
Ma... mi nell'attesa mi arrangio da solo, Quindi ecco un sito da cui partire con le openGL.
- http://nehe.gamedev.net/
E come non darti anche il link GameProgITA http://www.gameprog.it/, qui tralaltro, nell'apposita sezione openGL trovi i tutorial di NEHE (link sopra) tradotti in italiano...
A mio parere sono un OTTIMA risorsa da cui partire, e si spingono anche abbastanza in la... ovvio di cose da imparare poi ce ne sono un infinità...
Fammi sapere :-D

TomSawyer1
"stellacometa2003":
Davvero? Hai qualche link??


Fai F2 durante un progetto aperto. Lì trovi tutti gli eventi possibli per tutti gli oggetti. Ti consiglierei di procurarti MSDN. La guida della Microsoft.

Vincent2
Io dico che è sprecato oramai mettersi a lavorare con le OpenGL.
Io le ho usate e vi dico davvero che le ho abbandonato subito poichè anche gli shader fanno veramente pena, per non parlare del fatto che l'implementazione su windows è la 1.4 ed è stata fatta da microsoft.
passate a DirectX.

anonymous_be1147
"Vincent":
Io dico che è sprecato oramai mettersi a lavorare con le OpenGL.
Io le ho usate e vi dico davvero che le ho abbandonato subito poichè anche gli shader fanno veramente pena, per non parlare del fatto che l'implementazione su windows è la 1.4 ed è stata fatta da microsoft.
passate a DirectX.

C'è però anche un lato negativo nell'usare le DirectX: il programma girerà solo in Windows.

TomSawyer1
Penso che questo non sia un problema per la maggior parte delle persone, purtroppo. Anch'io sono un sostenitore di linux e del freeware in generale.

anonymous_be1147
"Crook":
Penso che questo non sia un problema per la maggior parte delle persone, purtroppo. Anch'io sono un sostenitore di linux e del freeware in generale.

Sì, hai ragione, ma ne facevo più una questione di portabilità in generale. Per fortuna non ci sono solo Windows e Linux ma anche altri sistemi operativi come Mac OS X e Sun Solaris per esempio. ;)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.