|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
grafica e programmazione
Se io creo con 3ds max una ambietazione, ad esempio una stanza con una persona all'inteno e voglio che questo diventi simile ad un videogioco, cioe voglio poter muovere la persona all'interno di questa stanza, come devo implementare il codice?
Insomma per realizzare qualcosa tipo un videogioco in miniatura come devo procedere? Come si unisce il codice con la grafica? Questo dubbio mi assilla parecchio ultimamente, mi sapete spiegare un attimo come avviene tutto ciò? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
In generale per fare cose del genere devi usare una libreria grafica, come opengl o directx e C/C++. Con queste libreria puoi crearti le scene 3d e le animazioni, mi pare che ci siano anche metodi per importare oggetti 3d creati con i programmi di grafica in un tuo programma per farci poi quello che vuoi. Ma di base devi studiarti quelle libreria, e non è cosa da poco.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
Scusa approfitto della tua disponibilita...io faccio giusto qualcosa di programmazione c++ e mi sto avvicinando alla grafiza un pochino ora per interesse generale visto che non sono molto dotato in disegno, le librerie grafiche come opengl e directx come sono strutturate?
In quanto librerie sono costituite da funzioni predefinite e utilizzabili? E come scrivere un programma in un altro linguaggio di programmazione ed in un altro ambiente? Grazie e scusa ancora. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Io conosco solo le opengl, che ti mettono a disposizione tutta una serie di funzioni per diesegnare in 3d e creare animazioni; il tutto comunque è abbastana a basso livello, devi essere tu da codice a controllare tutto, ogni cosa va costruita utilizzando primitive che disegnano sfere, cilindri, poligoni, ed effettuando traslazioni, scalamenti e rotazioni.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
Quote:
Io ho appena iniziato e finito un interessante libro sulla grafica 3d e su come si costruisce un motore 3d con codice assembly e c/c++. La cosa e complessa ma non quantoo credessi soprattutto avendo del tempo da dedicargli. Le opengl in che ambiente si utilizzano? Insomma se io dovessi realizzare questo piccolo progettino per un esame non mi servirebbe 3ds max per disegnare l'ambiente e dovrei utilizzare le librerie opengl o directx per disegnare e poi applicargli per esempio codice c? Grazie. |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
non so di preciso cos'è un motore grasfico; le opengl si usano nell'ambito di un programma c/c++,cioè sono esse stesse funzioni c/c++
Questo è un esempio di un programma che usa opengl per disegnare unt riangolo e un quadrato che girano su se stessi: Codice:
# include <windows.h> # include <stdlib.h> # include <gl/glut.h> # include <gl/gl.h> # include <gl/glu.h> GLfloat rtri = 0; // Angolo per il triangolo ( NUOVA ) GLfloat rquad = 0; // Angolo per il quadrato ( NUOVA ) GLfloat zView = 1.0; GLfloat xProj = 0.0; void rotazione(void) { rtri+=0.1; rquad-=0.5; glutPostRedisplay(); } void tastiera(unsigned char key, int x, int y) { switch (key) { case 'Z': zView = zView + 0.2; break; case 'z': zView = zView - 0.2; break; case 'X': xProj = xProj + 0.2; break; case 'x': xProj = xProj - 0.2; break; } } void disegna (void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt ( 0.0, 0.0, zView, 0.0, 0.0, -1.0, 0.0, 1.0, 0.0); glPushMatrix(); glTranslatef(-0.5f,0.0f,-1.0f); // Muove a sinistra di 1.5 unità e dentro lo schermo di 1.0 unità glRotatef(rtri,0.0f,1.0f,0.0f); // Ruota il triangolo sull'asse Y ( NUOVA ) glBegin(GL_TRIANGLES); // Disegna usando i triangoli glColor3f(0.0,1.0,0.0); glVertex3f( 0.0f, 0.4f, -0.0f); glColor3f(1.0f,0.0f,0.0f); glVertex3f(-0.4f,-0.4f, -0.0f); glColor3f(0.0f,0.0f,1.0f); glVertex3f( 0.4f,-0.4f, -0.0f); glEnd(); // Finisce di disegnare il triangolo //glLoadIdentity(); // Resetta la Modelview Matrix corrente per ripristinare la situazione dopo la rotazione del triang. glPopMatrix(); glPushMatrix(); glTranslatef(0.4f,0.0f,0.0f); // Muove a destra di 1 unità glRotatef(rquad,0.5f,0.0f,0.0f); // Ruota il quadrato sull'asse X ( NUOVA ) glBegin(GL_QUADS); // Disegna un quadrato glVertex3f(-0.4f, 0.4f, 0.0f); // Superiore sinistro glVertex3f( 0.4f, 0.4f, 0.0f); // Superiore destro glVertex3f( 0.4f,-0.4f, 0.0f); // Inferiore destro glVertex3f(-0.4f,-0.4f, 0.0f); // Inferiore sinistro glEnd(); // Finisce di disegnare il quadrato glPopMatrix(); glutSwapBuffers(); //glFlush(); } void aggiorna (int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective(100.0, (GLfloat) w/(GLfloat) h, 0.10, 100.0); glMatrixMode(GL_MODELVIEW); } int main(int argc, char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE| GLUT_RGB); glutInitWindowSize(800,600); glutInitWindowPosition(0, 0); glutCreateWindow("Prove con OpenGL"); glutDisplayFunc(disegna); glutIdleFunc(rotazione); //dovrebbe richiamare l'animazione glutReshapeFunc(aggiorna); glutKeyboardFunc(tastiera); glutMainLoop(); return 0; }
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
Questa mi sembra una buona notizia
![]() |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
sul sito di opengl trovi il redbook che e il libro ufficiale
http://www.opengl.org/documentation/red_book_1.0/ in basso c' il link per scaricare il pdf. Ti consiglio di utlizzare anche la libreria glut http://www.xmission.com/~nate/glut.html che ti facilita la costruzione di una finestra, e che va usata al posto delle intricate api di windows che richiedono decine di righe di codice per far apparire una finestra vuota, mentre con glut te la cavi con poche ed intuitive righe, come puoi vedere dalle istruzioni del main del programma che ti ho postato.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2002
Città: Singularity
Messaggi: 894
|
Guarda anche su http://www.gametutorials.com/.
Ci sono moltissimi esempi con codice commentato, compreso come leggere i file di 3dsmax. Animare una persona in 3d non è affatto facile, devi sapere qualcosa della scheletal animation. Se vuoi avere buone prestazioni è meglio esportare da 3dsmax modelli semplificati. E' vero che le schede attuali sono potenti, ma non credo che digeriscano bene un milione di vertici, specie senza ottimizzazioni ![]() Se invece di una stanza vuoi creare un paesaggio, cerca qualcosa su: elevation map, perlin noise, terrain generation. Però ti avverto che sono argomenti incasinati ![]() |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
Quote:
Grazie vedrò cosa riesco a combinare ![]() |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Sep 2003
Città: Salerno
Messaggi: 1356
|
ragazzi ma il codice postato da anx non riesco a compilarlo... perchè ? voi ci riuscite?
__________________
[PC] E7200 + Arock p43r1600-110 db + 2 x 1gb ddr800 corsair xmms2 + powercolor hd4670 + segate 500gb. iPhone 4 ![]() Concluso positivamente con : maxb81,echirulli,aflexxx1980,tom1,tensor,tetz,CaFFeiNe,Morosito,hakermax91,jagemal,dominik68. |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Per compilarlo devi avere la libreria opengl e glut installata nel compilatore, e devi linkare la libreria quando compili. Io ho usato MinGWDevelopperStudio per compilare, dopo aver scaricato la libreria glut per MinGW. Tu che compilatore usi?
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
#13 |
Member
Iscritto dal: Oct 2003
Messaggi: 65
|
Realizzare un motore 3d è una cosa troppo lunga e faticosa, e a mio parere per creare un motore decente ci vuole più di un cervello. Non per niente li vendono per migliaia di dollari.
Comunque si può creare un motore 3d "senza problemi" anche con il visual basic.net se vi piace.
__________________
Thermaltake Highest Xaser III V1000D - ENERMAX EG651P-VE FMA -TYAN Thunder K8W PRO S2885 - 1 AMD Opteron 248 - 2 x Corsair 512 DDR400 ECC - Thermaltake Venus 12 - Adaptec ASC-29320-R (asc-29320-r kit) SCSI Controller - 2 x MAXTOR ATLAS 15K 73GB U320 15Krpm SCSI (in RAID 0 4 system) - 4 x Hitachi Deskstar 7K250 250Gb (RAID 0) - Ati 9600 @ 9800 - PLEXTOR DVD-RW 8X - 2 x Monitor Philips Brilliance 107P50 17'' |
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Sep 2003
Città: Salerno
Messaggi: 1356
|
Quote:
![]()
__________________
[PC] E7200 + Arock p43r1600-110 db + 2 x 1gb ddr800 corsair xmms2 + powercolor hd4670 + segate 500gb. iPhone 4 ![]() Concluso positivamente con : maxb81,echirulli,aflexxx1980,tom1,tensor,tetz,CaFFeiNe,Morosito,hakermax91,jagemal,dominik68. Ultima modifica di tony.www : 29-09-2004 alle 10:41. |
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Nov 2002
Città: Singularity
Messaggi: 894
|
Serve anche il file .lib che contiene il codice (e le chiamate a OpenGL).
Non è facile da trovare ma c'è anche il codice in giro, al max lo scarichi e compili. GLUT non è il massimo, mi è capitato di usarlo per provare gli esempi del RedBook ma era instabile e ogni tanto mi dava rogne con il framebuffer. Insomma, va bene solo per iniziare. Su http://nehe.gamedev.net c'è il codice per creare da zero una finestra openGL, e parecchi tutorial. E' il riferimento per chi si avvicina alla programmazione OpenGL. |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Se vuoi usare MinGWDevelopperStudio per programmare le opengl sono gia incluse, basta aggiungere la libreria glut, inserendola nelle giuste cartelle, e inserire le opzioni per il linking delle librerie (cosa da fare comqunue con qlsiasi ambiente diprogrammazione); e funziona, se vuoi usare questo ambiente ti dò tutti i detttagli per farlo funzionare. A me le glut non hanno mai dato problemi, e ho anche fatto un progetto grosso. Se uno non sa già usare le API di windows è assolutamente sconsigliato utilizzarle per far apparire la finestra, visto che ciò richiede un sacco di righe di codice, anche abbastanza criptiche per chi non conosce le api, e alla fine queste distolgono da quello che è il vero obiettivo, cioè le opengl, e uno quando legge un tutorial con le api non riesce a capire dove finisce opengl e dove iniziano le api.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Sep 2003
Città: Salerno
Messaggi: 1356
|
Quote:
![]()
__________________
[PC] E7200 + Arock p43r1600-110 db + 2 x 1gb ddr800 corsair xmms2 + powercolor hd4670 + segate 500gb. iPhone 4 ![]() Concluso positivamente con : maxb81,echirulli,aflexxx1980,tom1,tensor,tetz,CaFFeiNe,Morosito,hakermax91,jagemal,dominik68. |
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Nov 2002
Città: Singularity
Messaggi: 894
|
http://www.xmission.com/~nate/glut.html
La metti assieme alle altre librerie e scrivi: #include <glut.h> Oppure in una sottodirectory a parte (per ordine), diciamo "GL" e scrivi: #include <GL/glut.h> Oppure nella directory del progetto e scrivi: #include "glut.h" Io ho scelto l'ultima per questioni di ordine. |
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Sep 2003
Città: Salerno
Messaggi: 1356
|
Quote:
![]()
__________________
[PC] E7200 + Arock p43r1600-110 db + 2 x 1gb ddr800 corsair xmms2 + powercolor hd4670 + segate 500gb. iPhone 4 ![]() Concluso positivamente con : maxb81,echirulli,aflexxx1980,tom1,tensor,tetz,CaFFeiNe,Morosito,hakermax91,jagemal,dominik68. |
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Io uso MinGWDevelopperStudio, che si basa sul compilatore MinGW, quindi la procedura dovrebbe essere valida per chiunque usi questo compilatore indipendentemente dall'ambiente utilizzato.
Scarica glut per MInGW da questo sito per esempio: http://mywebpage.netscape.com/PtrPck/glut.htm Scompatta il file .zip; quindi copia il file .dll della cartella di sistema (c:\windows\system32) (puoi sovrascrivere il file eventualmente gia esistente). Copia i file della cartella .lib all'interno della cartella lib di MnGW; analogamente va fatto il contenuto della cartella include, che va copiato nella cartella include del compilatore. In parteicolare, la cartella incude del file .zip contiene una sottocartella mui che va copiata dentro la cartella include di MinGW, e una cartella GL, che gia esiste dentro MinGW; in questo caso devi integrare la cartella GL gia esistente in MinGW con il contenuto della cartela GL del file zippato. Fa attenzione che se usi MInGWDevelopperStudio c'è una cartella include nellla cartella di instalazione del programma, quella da considerare è invece la cartella include di MinGW, che si trova nella sottocartella di nome MInGW. A questo punto la libreira è installata. Sotto MinGWDevelopperStudio crea un nuovo progetto come win32 CONSOLE application; quindi va in project > settings, scegli la scheda link e nel campo di testo inserirsci: opengl32, glu32, glut32 in questo modo stai linkando il programma contro le librerie opengl, glue e glut. Prova ora a copiare il codice che ho postato sopra e dovrebbe funzionare. Se non funziona esegui separatamente prima il passo della compilazione e poi quello di linking e dimmi dove avviene l'errore e che errore.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:49.