turing
Član broj: 427 Poruke: 7 *.school.etoncollege.org.uk
|
Evo ti sorca koji radi po principa OpenGL sa ekstenzijom GLUT
-------seci ovde---------------------
#include <stdio.h>
#include <stdlib.h>
/* pretpostavlja se da ti se hederi nalaze u /usr/include/GL */
#include <GL/glut.h>
/* koordinate temena kvadrata */
float x1=-0.4, x2=0.4, x3=0.4, x4=-0.4;
float y1=0.4, y2=0.4, y3=-0.4, y4=-0.4;
/* nacrtaj scenu */
void DrawScene (void) {
/* postavi boju u pozadini po principu RGBa */
glClearColor (0.3, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
/* objekat koji crtamo (kvadrat) bice obojen u plavo - opet RGB */
glColor3f(0.0, 0.1, 1.0);
/* postavi temena kvadrata */
glBegin (GL_QUADS);
glVertex2f( x1, y1);
glVertex2f( x2, y2);
glVertex2f( x3, y3);
glVertex2f( x4, y4);
glEnd();
/* ova komanda osigurava izvrsavanje svih navedenih funkcija */
glFlush();
}
/* malo igranje sa tastaturom */
void cbKeyPressed (unsigned char key, int x, int y) {
switch (key) {
/* desno - kvadrat se pomera po x osi */
case 'd':
if(x1 < 1.0 && x2 < 1.0 && x3 < 1.0 && x4 < 1.0) {
x1+=0.1; x2+=0.1; x3+=0.1, x4+=0.1;
}
glutPostRedisplay();
break;
/* levo - kvadrat se opet pomera po x osi */
case 'l':
if(x1 > -1.0 && x2 > -1.0 && x3 > -1.0 && x4 > -1.0) {
x1+=-0.1; x2+=-0.1; x3+=-0.1, x4+=-0.1;
}
glutPostRedisplay();
break;
/* gore - kvadrat se pomera po y osi */
case 'g':
if(y1 < 1.0 && y2 < 1.0 && y3 < 1.0 && y4 < 1.0) {
y1+=0.1; y2+=0.1; y3+=0.1, y4+=0.1;
}
glutPostRedisplay();
break;
/* dole - opet pomeranje po y osi */
case 'o':
if(y1 > -1.0 && y2 > -1.0 && y3 > -1.0 && y4 > -1.0) {
y1+=-0.1; y2+=-0.1; y3+=-0.1, y4+=-0.1;
}
glutPostRedisplay();
break;
/* igranje sa rotiranjem po x, y & z osi */
case 'x':
glRotatef(5, 0.1, 0.0, 0.0);
glutPostRedisplay();
break;
case 'y':
glRotatef(5, 0.0, 0.1, 0.0);
glutPostRedisplay();
break;
case 'z':
glRotatef(5, 0.0, 0.0, 0.1);
glutPostRedisplay();
break;
default:
printf("Pritisnuti taster nema nikakvo znacenje!\n");
break;
}
}
int main (int argc, char *argv[]) {
/* inicijalizuje OpenGL Utility Toolkit a.k.a GLUT */
glutInit(&argc, argv);
/* koristi jedan graficki bafer i RGB sistem boja */
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(100,100); /* pozicija prozora */
glutInitWindowSize (500,500); /* definisi velicinu prozora */
glutCreateWindow(argv[0]); /* kreiraj prozor gde mu je ime argv[0] */
/* sluzi za prepoznavanje tastera */
glutKeyboardFunc(&cbKeyPressed);
/* crta scenu */
glutDisplayFunc(DrawScene);
glutMainLoop();
return EXIT_SUCCESS;
}
-----------seci ovde-------------------
Da bi ovo iskompajlirao potrebno je da imas Mesa3D koju mozes naci na freshmeatu. Takodje ovo mozes da uradis koristeci QCanvas koji je sigurno bolji za 2D (pretezno za crtanje grafika), dok OpenGL je mnogo bolji za 3D. Ipak najbolja je stvar sto ti ovo dvoje mozes da kombinujes i da napravis program koji ce da radi na svakoj platformi (Qt i OpenGL imaju svoje ekstenzije i na Windowsu i na Linuxu). Tako da uz malo znanja mozes da napravis aplikaciju koja je nezavisna u odnosu na OS.
|