View Full Version : 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ò?
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.
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.
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.
Originariamente inviato da anx721
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.
Insomma e un motore grafico!?
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.
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:
# 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;
}
Questa mi sembra una buona notizia:D , grazie mille allora non mi resta che cercare se esiste un libro che contenga le funzioni delle librerie per farmi un idea e tentare un primo approccio. Grazie mille ancora posso dormire tranquillo finalmente.
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.
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 :p
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 :D
Originariamente inviato da Banus
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 :p
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 :D
Grazie vedrò cosa riesco a combinare ;) .
tony.www
27-09-2004, 18:28
ragazzi ma il codice postato da anx non riesco a compilarlo... perchè ? voi ci riuscite?
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?
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.
tony.www
29-09-2004, 10:14
Originariamente inviato da anx721
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?
lo stesso... ma non avevo scaricato la libreria glut... ma basta copiare il file glut.h in include :confused: ?
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.
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.
tony.www
29-09-2004, 12:25
Originariamente inviato da anx721
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.
si.. mi diresti come usare le librerie glut? devo copiare il file glut.h nella cartella include? e il file .dll dove lo devo mettere? ti sarei grato se mi aiutassi :)
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.
tony.www
29-09-2004, 12:55
Originariamente inviato da Banus
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.
capito .. ora ci provo! grazie
:)
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.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.