You are on page 1of 5

ΙΕΚ ΔΕΛΤΑ 360° Πάτρας

OpenGL

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ

ΠΡΩΤΟ ΣΕΤ ΑΣΚΗΣΕΩΝ

ΕΚΠΑΙΔΕΥΤΗΣ
ΙΩΑΝΝΙΔΟΥ ΕΙΡΗΝΗ
ΑΣΚΗΣΗ 1
Α. Ποια είναι η απαραίτητη βιβλιοθήκη που πρέπει να συμπεριληφθεί στον παρακάτω κώδικα; Να
συμπληρωθεί πάνω στον κώδικα.
B. Ποιο είναι το αποτέλεσμα μετά το compile & run του παρακάτω κώδικα;

#include <__________.h > //ΕΡΩΤΗΜΑ Α


void display()
{
glClearColor(1,1,1,1);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
glColor3f(1,0,0);
//
glVertex2i(20,20);
glVertex2i(40,40);
glEnd();
glFlush();
}
int main(int argc, char** argv)
{

//
glutInit(&argc,argv);
glutInitWindowPosition(50,50);
//
glutInitWindowSize(640,480);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutCreateWindow("Welcome to OpenGL");
//
glMatrixMode(GL_PROJECTION);

gluOrtho2D(0,50,0,50);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
B. Ποια είναι η λειτουργία των εντολών που επισημαίνονται με κόκκινο χρώμα; Σημειώστε την απάντηση
σας στα αντίστοιχα «//».
Γ. Τροποποιείστε τον παραπάνω κώδικα ώστε το αποτέλεσμα σας να φαίνεται όπως το παρακάτω σχήμα:
ΑΣΚΗΣΗ 2
Α. Ποιο θα το αποτέλεσμα του παρακάτω κώδικα μετά το compile & run;
#include <GL/glut.h>
void display()
{
glClearColor(1,1,1,0);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glColor3ub(0,0,255);
glVertex2i(0,0);
glColor3ub(0,0,255);
glVertex2i(10,0);
glVertex2i(5,10);
glEnd();
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitWindowPosition(0,50);
glutInitWindowSize(440,380);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutCreateWindow("Welcome to OpenGL");
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-10,20,-10,20);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
Β. Ποιος είναι ο ρόλος των εντολών που έχουν επισημανθεί με κόκκινο χρώμα;
Γ. Τροποποιείστε τον κώδικα ώστε να εμφανίσετε το αποτέλεσμα της παρακάτω εικόνας:

Δ. Xρησιμοποιείστε τη συνάρτηση glTranslatef(x,y,z) για να μετακινήσετε το σχήμα όπως φαίνεται


παρακάτω:
ΑΣΚΗΣΗ 3
Α. Να γράψετε και να εκτελέσετε κώδικα που θα δημιουργεί το παρακάτω παράθυρο και σχήμα.

Β. Τροποποιείστε τον κώδικα σας έτσι ώστε το σχήμα να μετακινηθεί όπως φαίνεται παρακάτω:

Γ. Προσθέστε στον κώδικα σας την παρακάτω συνάρτηση και εξηγήστε ποια η λειτουργία της:

Συνάρτηση:
void keyboard(unsigned char key,int x, int y)
{

if (key=='w')
{
//ΜΕΤΑΚΙΝΗΣΗ ΚΟΥΤΙΟΥ
glutPostRedisplay();
}
}

Και εντός της main:


glutKeyboardFunc(keyboard);
Δ. Δοκιμάστε να αφαιρέσετε την glutPostRedisplay();.Τί παρατηρείτε; Ποια η λειτουργία της;

E. Τροποποιείστε τον κώδικα ώστε η μετακίνηση να γίνεται και με το πάτημα του κουμπιού κεφαλαίου
«W» αντί μόνο μικρού.

ΣΤ. Αντικαταστήστε την glutKeyboardFunc(keyboard); με την glutSpecialFunc(keyboard);


Και κάνετε έλεγχο για είσοδο GLUT_KEY_UP. Γιατί δεν τρέχει ο κώδικας; Διορθώστε ώστε να εκτελεστεί.

Ζ. Προσθέστε έλεγχο για είσοδο του πλήκτρου .Τροποποιείστε τον κώδικα σας έτσι ώστε με το πάτημα του

πλήκτρου προς τα πάνω ( ) το σχήμα να μετακινείται κατά 5 προς τα επάνω, ενώ με το πάτημα του

κουμπιού ( ) κατά 5 προς τα κάτω.

You might also like