PDA

Visualizza la versione completa : [C] OpenGL per gioco 2D


rocco.g
13-10-2004, 21:13
ciao a tutti,
spero mi possiate aiutare...
Allora vorrei divertirmi a passare il tempo realizzando un videogioco 2d in C. In seuito a varie consultazioni credo che le OpenGL come librerie grafiche siano le più adatte e le più scalabili... ora il problema è: dove trovo la guida di riferimento e le librerie ? non mi dite su google generico, perchè ho cercato ma si trovano parecchie cose che non servono ed altre che servono però sono incasinate... magari se qualcuno di voi mi sa dare qualke info, così vado a colpo sicuro ed inizio a studiarmi un pò le OpenGL...

anche qualke libro da comprare... non deve essere per forza qualcosa free...

gokan
13-10-2004, 21:22
Ci sono diversi tread che parlano di questo argomento,
uno di questi (http://forum.html.it/forum/showthread.php?s=&threadid=718911&perpage=15&highlight=OpenGL&pagenumber=2)

Vai sul sito www.opengl.org e scarica il redbook, questa è la guida ufficiale.Sappi che non è facilissimo programmare un videogioco, quindi, armati di pazienza e studiati almeno i primi 5 capitoli del testo detto sopra. Dopodichè ti consiglio di cercare in rete qualche semplice esempio che ti permetta di capire come funziona un banale giochetto 2d.

rocco.g
13-10-2004, 21:27
si per studiare non ho problemi, anzi mi piace farlo :-)
il C lo conosco abbastanza bene, poi ho anche buone nozioni di analisi e geometria che credo servano nel programmare un gioco...


ora scarico e inizio a studiare il redbook :D

ah le librerie le prendo dal sito che mi hai dato vero ?

rocco.g
13-10-2004, 21:32
va beh mi ci vorrà un pò il pdf è di 7mb ed ho un 56k come connessione... cmq senti ma cosa dev oscaricare per avere le librerie sul pc, intendo gli header da includere nei programmi che scrivo... credo ci dovrebbe essere un file zippato o qualcosa del genere vero ? non riesco a trovarlo...

gokan
13-10-2004, 21:34
Per potere eseguire gli esempi del libro, hai bisogno delle glut. Informazioni e files li trovi qui:
http://www3.csr.unibo.it/~lazzaro/
scegli "metodi numerici ...."

Prendi le glut32 e leggiti il file readme

Ciao

rocco.g
13-10-2004, 21:44
mm ho provato a compilare un file di esempio:


#include <GL/glut.h>
#include "stdlib.h"

#define RAMPSIZE 16
#define RAMP1START 32
#define RAMP2START 48

static float rotAngle = 0.;

/* Initialize antialiasing for color index mode,
* including loading a green color ramp starting
* at RAMP1START, and a blue color ramp starting
* at RAMP2START. The ramps must be a multiple of 16.
*/
void init(void)
{
int i;

for (i = 0; i < RAMPSIZE; i++) {
GLfloat shade;
shade = (GLfloat) i/(GLfloat) RAMPSIZE;
glutSetColor(RAMP1START+(GLint)i, 0., shade, 0.);
glutSetColor(RAMP2START+(GLint)i, 0., 0., shade);
}

glEnable (GL_LINE_SMOOTH);
glHint (GL_LINE_SMOOTH_HINT, GL_DONT_CARE);
glLineWidth (1.5);

glClearIndex ((GLfloat) RAMP1START);
}

/* Draw 2 diagonal lines to form an X
*/
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);

glIndexi(RAMP1START);
glPushMatrix();
glRotatef(-rotAngle, 0.0, 0.0, 0.1);
glBegin (GL_LINES);
glVertex2f (-0.5, 0.5);
glVertex2f (0.5, -0.5);
glEnd ();
glPopMatrix();

glIndexi(RAMP2START);
glPushMatrix();
glRotatef(rotAngle, 0.0, 0.0, 0.1);
glBegin (GL_LINES);
glVertex2f (0.5, 0.5);
glVertex2f (-0.5, -0.5);
glEnd ();
glPopMatrix();

glFlush();
}

void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
gluOrtho2D (-1.0, 1.0,
-1.0*(GLfloat)h/(GLfloat)w, 1.0*(GLfloat)h/(GLfloat)w);
else
gluOrtho2D (-1.0*(GLfloat)w/(GLfloat)h,
1.0*(GLfloat)w/(GLfloat)h, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 'r':
case 'R':
rotAngle += 20.;
if (rotAngle >= 360.) rotAngle = 0.;
glutPostRedisplay();
break;
case 27: /* Escape Key */
exit(0);
break;
default:
break;
}
}

/* Main Loop
* Open window with initial window size, title bar,
* color index display mode, and handle input events.
*/
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_INDEX);
glutInitWindowSize (200, 200);
glutCreateWindow (argv[0]);
init();
glutReshapeFunc (reshape);
glutKeyboardFunc (keyboard);
glutDisplayFunc (display);
glutMainLoop();
return 0;
}

ma mi da errore, anke se ho copiato la libreria nella cartella lib del dev-c++, forse però è per questo, nel senso che io uso il devc++, magari devo configurare qualcosa...

rocco.g
13-10-2004, 21:45
dimenticavo gli errori sono questi:

[code]Compiler: Default compiler
Executing gcc.exe...
gcc.exe "C:\Documents and Settings\Rocco\Desktop\aaindex.c" -o "C:\Documents and Settings\Rocco\Desktop\aaindex.exe" -ansi -g3 -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib"
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x15): In function `glutInit_ATEXIT_HACK':
C:/Dev-Cpp/include/GL/glut.h:486: undefined reference to `__glutInitWithExit'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x30): In function `glutCreateWindow_ATEXIT_HACK':
C:/Dev-Cpp/include/GL/glut.h:503: undefined reference to `__glutCreateWindowWithExit'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x4c): In function `glutCreateMenu_ATEXIT_HACK':
C:/Dev-Cpp/include/GL/glut.h:549: undefined reference to `__glutCreateMenuWithExit'

C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x8e): In function `init':
C:/Documents and Settings/Rocco/Desktop/aaindex.c:66: undefined reference to `glutSetColor'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0xa4):C:/Documents and Settings/Rocco/Desktop/aaindex.c:67: undefined reference to `glutSetColor'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0xbb):C:/Documents and Settings/Rocco/Desktop/aaindex.c:70: undefined reference to `_imp__glEnable'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0xd2):C:/Documents and Settings/Rocco/Desktop/aaindex.c:71: undefined reference to `_imp__glHint'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0xe4):C:/Documents and Settings/Rocco/Desktop/aaindex.c:72: undefined reference to `_imp__glLineWidth'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0xf6):C:/Documents and Settings/Rocco/Desktop/aaindex.c:74: undefined reference to `_imp__glClearIndex'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x111): In function `display':
C:/Documents and Settings/Rocco/Desktop/aaindex.c:81: undefined reference to `_imp__glClear'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x120):C:/Documents and Settings/Rocco/Desktop/aaindex.c:83: undefined reference to `_imp__glIndexi'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x12a):C:/Documents and Settings/Rocco/Desktop/aaindex.c:84: undefined reference to `_imp__glPushMatrix'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x145):C:/Documents and Settings/Rocco/Desktop/aaindex.c:85: undefined reference to `_imp__glRotatef'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x154):C:/Documents and Settings/Rocco/Desktop/aaindex.c:86: undefined reference to `_imp__glBegin'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x16b):C:/Documents and Settings/Rocco/Desktop/aaindex.c:87: undefined reference to `_imp__glVertex2f'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x182):C:/Documents and Settings/Rocco/Desktop/aaindex.c:88: undefined reference to `_imp__glVertex2f'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x18c):C:/Documents and Settings/Rocco/Desktop/aaindex.c:89: undefined reference to `_imp__glEnd'

C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x193):C:/Documents and Settings/Rocco/Desktop/aaindex.c:90: undefined reference to `_imp__glPopMatrix'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x19f):C:/Documents and Settings/Rocco/Desktop/aaindex.c:92: undefined reference to `_imp__glIndexi'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x1a9):C:/Documents and Settings/Rocco/Desktop/aaindex.c:93: undefined reference to `_imp__glPushMatrix'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x1bf):C:/Documents and Settings/Rocco/Desktop/aaindex.c:94: undefined reference to `_imp__glRotatef'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x1ce):C:/Documents and Settings/Rocco/Desktop/aaindex.c:95: undefined reference to `_imp__glBegin'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x1e5):C:/Documents and Settings/Rocco/Desktop/aaindex.c:96: undefined reference to `_imp__glVertex2f'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x1fc):C:/Documents and Settings/Rocco/Desktop/aaindex.c:97: undefined reference to `_imp__glVertex2f'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x206):C:/Documents and Settings/Rocco/Desktop/aaindex.c:98: undefined reference to `_imp__glEnd'

C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x20d):C:/Documents and Settings/Rocco/Desktop/aaindex.c:99: undefined reference to `_imp__glPopMatrix'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x214):C:/Documents and Settings/Rocco/Desktop/aaindex.c:101: undefined reference to `_imp__glFlush'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x239): In function `reshape':
C:/Documents and Settings/Rocco/Desktop/aaindex.c:106: undefined reference to `_imp__glViewport'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x24b):C:/Documents and Settings/Rocco/Desktop/aaindex.c:107: undefined reference to `_imp__glMatrixMode'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x255):C:/Documents and Settings/Rocco/Desktop/aaindex.c:108: undefined reference to `_imp__glLoadIdentity'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x298):C:/Documents and Settings/Rocco/Desktop/aaindex.c:110: undefined reference to `_imp__gluOrtho2D'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x2d8):C:/Documents and Settings/Rocco/Desktop/aaindex.c:113: undefined reference to `_imp__gluOrtho2D'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x2ea):C:/Documents and Settings/Rocco/Desktop/aaindex.c:115: undefined reference to `_imp__glMatrixMode'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x2f4):C:/Documents and Settings/Rocco/Desktop/aaindex.c:116: undefined reference to `_imp__glLoadIdentity'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x37b): In function `keyboard':
C:/Documents and Settings/Rocco/Desktop/aaindex.c:126: undefined reference to `glutPostRedisplay'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x3c4): In function `main':

C:/Documents and Settings/Rocco/Desktop/aaindex.c:143: undefined reference to `glutInitDisplayMode'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x3d9):C:/Documents and Settings/Rocco/Desktop/aaindex.c:144: undefined reference to `glutInitWindowSize'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x3fe):C:/Documents and Settings/Rocco/Desktop/aaindex.c:147: undefined reference to `glutReshapeFunc'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x40e):C:/Documents and Settings/Rocco/Desktop/aaindex.c:148: undefined reference to `glutKeyboardFunc'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x41e):C:/Documents and Settings/Rocco/Desktop/aaindex.c:149: undefined reference to `glutDisplayFunc'
C:\DOCUME~1\Rocco\IMPOST~1\Temp/ccQfaaaa.o(.text+0x426):C:/Documents and Settings/Rocco/Desktop/aaindex.c:150: undefined reference to `glutMainLoop'

Execution terminated
[/quote]

rocco.g
13-10-2004, 21:45
sembra che non riesca a risolvere i comandi contenuti in glut.h...

gandalf45
13-10-2004, 21:57
se non l'hai già fatto prova ad aprire project options, poi
parameters -> Add library or object, aggiungi le librerie glu* (non ricordo il nome specifico)

rocco.g
13-10-2004, 22:40
l'avevo fatto ma non fungeva, ora che ho riavviato invece sembra andar benissimo!!!

meglio così!!!


grazie a tutti per le info...


cmq c'è qualcuno che ha già letto il redbook ?

Loading