Εισαγωγή στην OpenGL

Σχετικά έγγραφα
Εισαγωγή στην OpenGL

Γραφικά Υπολογιστών: OpenGL

Γραφικά Υπολογιστών. Τμήμα Μηχανικών Πληροφορικής ΤΕΙ Ανατολικής Μακεδονίας και Θράκης. Γραφικά Υπολογιστών ΣΤ Εξάμηνο. Δρ Κωνσταντίνος Δεμερτζής

Προγραμματισμός γραφικών

OpenGL. Εισαγωγή στην OpenGL Βασικά Γεωμετρικά Σχήματα Παράλληλη (ορθογραφική) προβολή. Μάθημα: Γραφικά Υπολογιστών και Εικονική Πραγματικότητα

OpenGL. Εισαγωγή. Εξάμηνο: 2014Β. Διδάσκουσα: Κανελλοπούλου Χριστίνα_ΠΕ19 Πληροφορικής Ηλεκτρονική Τάξη:

Κεφάλαιο 2 ο Είσοδος/Έξοδος ιαχείριση γεγονότων - Αποκοπή στις δύο διαστάσεις

Η Βιβλιοθήκη Γραφικών OpenGl Με Χρήση C/C++, JAVA και PYTHON

Κεφάλαιο 3ο Μετασχηµατισµοί συντεταγµένων

Κεφάλαιο 1 Βασικές αρχές σχεδίασης

Εισαγωγή στην OpenGL: μέρος 1ο

Κεφάλαιο 4 ο Προβολές

Κεφάλαιο 5 Απόδοση τρισδιάστατων σκηνών Κινούµενα γραφικά

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

Βασικές αρχές σχεδίασης (Α)

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

Απόδοση 3D σκηνών - Κινούµενα γραφικά

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Προγραμματισμός Η/Υ (ΤΛ2007 )

Συσκευές εισόδου. Φυσικές συσκευές εισόδου Λογικές συσκευές εισόδου

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Είσοδος Έξοδος ιαχείριση γεγονότων Απόδοση 2 σκηνών

Προγραμματισμός ΙI (E)

ΜΟΝΤΕΛΟΠΟΙΗΣΗ ΕΞΟΧΙΚΗΣ ΚΑΤΟΙΚΙΑΣ ΜΕ ΧΡΗΣΗ OpenGL Περιστερίδου Καλλιόπη

Κεφάλαιο 6 ο Φωτορεαλισµός

Κεφάλαιο 7 ο Απόδοση υφής

Εισαγωγή. Γιατί γραφικά υπολογιστών; Προσέγγιση «από πάνω προς τα κάτω» (top-down). Βαθµίδα διασύνδεσης προγραµµατιστή εφαρµογών (API)

Αντικειμενοστραφής Προγραμματισμός

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Ι (ΗΥ120)

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Προγραµµατισµός Ι (ΗΥ120)

2.1 Αντικειµενοστρεφής προγραµµατισµός

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Προγραμματισμός Ι (ΗΥ120)

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Προγραμματισμός Ι (ΗΥ120)

Προγραµµατισµός Ι Εργαστήριο 6ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 6 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραµµατισµός Ι Εργαστήριο 6ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 6 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Ανάπτυξη και Σχεδίαση Λογισμικού

(programming interfaceή/και application programming interface API).

Παράλληλη Επεξεργασία

Επεξεργασία Αρχείων Κειµένου

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραμματισμός Υπολογιστών με C++

ιπλωµατική Εργασία Ανάπτυξη Γραφικού Περιβάλλοντος για την απεικόνιση και διαχείριση τρισδιάστατων πλεγµάτων και επιφανειών

Εργαστήριο 2: Πίνακες

Αρχεία Κεφαλίδων ΑΡΧΕΙΑ ΚΕΦΑΛΙΔΩΝ. Γεώργιος Παπαϊωάννου ( )

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (HY120)

είκτες και Πίνακες (2)

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμό για ΗΜΥ

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Προγραμματισμός Ι (ΗΥ120)

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Προγραμματισμός Ι (HY120)

Προγραμματισμό για ΗΜΥ

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Εισαγωγή στην OpenGL: μέρος 2ο

double sum(double a, double b) { return(a+b); } double my_avg(double a, double b) { return(sum(a, b)/2.0); }

Εισαγωγή στην πληροφορική

Προγραμματισμός Ι (ΗΥ120)

Προεπεξεργαστής C. Προγραμματισμός Ι 1

Γλώσσα Προγραμματισμού C

Αντικειµενοστρεφής Προγραµµατισµός

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος Διάλεξη Νο8

Μετασχηµατισµοί συντεταγµένων

GRAPHICS AND CODE DESIGN

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός H/Y Ενότητα 5: Συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Ανάπτυξη και Σχεδίαση Λογισμικού

Πληροφορική 2. Γλώσσες Προγραμματισμού

Εικόνες και γραφικά. Τεχνολογία Πολυµέσων 05-1

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Βασικές αρχές σχεδίασης (β)

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου Θέµα 1. (α')

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

BloodShed Dev C++ Οδηγίες Χρήσης (Συγγραφέας: Πάρις Πολύζος)

Εισαγωγή στον Προγραμματισμό με C++

Δομημένος Προγραμματισμός

C Programming EPL032 Maria Stavrinou Ioannou Εισαγωγή στη Γλώσσα C

Η γλώσσα προγραμματισμού C

Συσκευές εισόδου. Φυσικές συσκευές εισόδου Λογικές συσκευές εισόδου

Εισαγωγή στην πληροφορική

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Προγραμματισμός Ι (ΗΥ120)

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Προγραμματισμός I (Θ)

Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Ενδεικτικές λύσεις και στατιστικά

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Transcript:

Εισαγωγή στην OpenGL Περιεχόµενα εισαγωγικής ενότητας: Γενικά χαρακτηριστικά της OpenGL Βιβλιοθήκες που της OpenGL Ένα τυπικό πρόγραµµα

Τι είναι η OpenGL; Η OpenGL δεν είναι µια συγκεκριµένη βιβλιοθήκη γραφικών. Είναι ένα πρότυπο που καθορίζει τις λειτουργίες που πρέπει να υποστηρίζει µία βιβλιοθήκη γραφικών ούτως ώστε να είναι συµβατή µεαυτήν. Η OpenGL ορίζει µια προγραµµατιστική διεπιφάνεια (Application Programming Interface) σχεδίασης γραφικών.

Χαρακτηριστικά της OpenGL Ο προγραµµατιστής προγραµµατίζει χρησιµοποιώντας µια υλοποίηση της OpenGL. Μια βιβλιοθήκη που υλοποιεί το πρότυπο της OpenGL µπορεί να συνταχθεί σε οποιαδήποτε γλώσσα προγραµµατισµού (η OpenGL είναι πρότυπο ανεξάρτητο πλατφόρµας). Οι περισσότεροι µεταγλωττιστές εµπεριέχουν ή µπορεί να ενσωµατωθεί σε αυτούς µία βιβλιοθήκη της OpenGL. Στο παρόν σεµινάριο θα χρησιµοποιηθεί υλοποίηση της OpenGL στη γλώσσα προγραµµατισµού C.

Κατηγορίες βιβλιοθηκών της OpenGL GL Core Library: Περιέχει βασικές εντολές σχεδίασης (σχεδίαση βασικών γεωµετρικών σχηµάτων, ορισµός χρωµάτων κλπ.) Ολες οι ρουτίνες της βιβλιοθήκης ξεκινούν µε το πρόθεµα gl OpenGL Utility Library (GLU): Περιέχει πιο εξειδικευµένες λειτουργίες (Σχεδίαση σύνθετων επιφανειών, ορισµός προβολών κλπ) Ολες οι ρουτίνες της βιβλιοθήκης ξεκινούν µε το πρόθεµα glu OpenGL Utility Toolkit (GLUT): Ρουτίνες εισόδου-εξόδου (σχηµατισµός παραθύρων, διαχείριση γεγονότων κλπ.). Κατ εξαίρεση, οι εντολές της GLUT εξαρτώνται από την αρχιτεκτονική του συστήµατος. Ολες οι εντολές της βιβλιοθήκης ξεκινούν µετο πρόθεµα glut.

Ένα τυπικό παράδειγµα #include <glut.h> void display() { glclearcolor(1,1,1,0); 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 GL UT_RGB); glutcreatewindow("a sample OpenGL application"); glmatrixmode(gl_projection); gluortho2d(0,50,0,50); glutdisplayfunc(display); glutmainloop(); return 0;}

Κεφαλίδες της OpenGL #include <glut.h>: Επιτρέπει τη χρήση βιβλιοθηκών της OpenGL #include <gl.h> = OpenGL Core Library #include <glu.h> = OpenGL Utility #include <glut.h> = OpenGL Core Library + OpenGL Utility + OpenGL Utility Toolkit

Ανάλυση παράδειγµατος (main) (1) glutinit(): Ενεργοποιεί τη χρήση των εντολών της βιβλιοθήκης GLUT. int main(int argc, char** argv){ glutinit(&argc,argv); glutinitwindowposition(50,50); glutinitwindowsize(640,480); glutinitdisplaymode(glut_single GL UT_RGB); glutcreatewindow("a sample OpenGL application"); glmatrixmode(gl_projection); gluortho2d(0,50,0,50); glutdisplayfunc(display); glutmainloop(); return 0;}

Ανάλυση παράδειγµατος (main) (2) int main(int argc, char** argv){ glutinit(&argc,argv); glutinitwindowposition: ηλώνει τη θέση στην οθόνη όπου θα εµφανιστεί το παράθυρο της εφαρµογής glutinitwindowposition(50,50); glutinitwindowsize(640,480); glutinitdisplaymode(glut_single GL UT_RGB); glutcreatewindow("a sample OpenGL application"); glmatrixmode(gl_projection); gluortho2d(0,50,0,50); glutdisplayfunc(display); glutmainloop(); return 0;}

Ανάλυση παράδειγµατος (main) (3) int main(int argc, char** argv){ glutinit(&argc,argv); glutinitwindowsize: Ορίζει τις διαστάσεις του παραθύρου της εφαρµογής σε pixels glutinitwindowposition(50,50); glutinitwindowsize(640,480); glutinitdisplaymode(glut_single GL UT_RGB); glutcreatewindow("a sample OpenGL application"); glmatrixmode(gl_projection); gluortho2d(0,50,0,50); glutdisplayfunc(display); glutmainloop(); return 0;}

Ανάλυση παράδειγµατος (main) (4) int main(int argc, char** argv){ glutinit(&argc,argv); glutinitwindowposition(50,50); glutinitwindowsize(640,480); glutinitdisplaymode: Καθορίζει ρυθµίσεις απεικόνισης (µοντέλο ενταµίευσης, χρωµατικό µοντέλο κ.λ.π.) glutinitdisplaymode(glut_single GL UT_RGB); glutcreatewindow("a sample OpenGL application"); glmatrixmode(gl_projection); gluortho2d(0,50,0,50); glutdisplayfunc(display); glutmainloop(); return 0;}

Ανάλυση παράδειγµατος (main) (5) int main(int argc, char** argv){ glutinit(&argc,argv); glutinitwindowposition(50,50); glutinitwindowsize(640,480); glutcreatewindow: Εµφανίζει το παράθυρο της εφαρµογής glutinitdisplaymode(glut_single GL UT_RGB); glutcreatewindow("a sample OpenGL application"); glmatrixmode(gl_projection); gluortho2d(0,50,0,50); glutdisplayfunc(display); glutmainloop(); return 0;}

Ανάλυση παράδειγµατος (main) (6) int main(int argc, char** argv){ glutinit(&argc,argv); glutinitwindowposition(50,50); glutinitwindowsize(640,480); glutinitdisplaymode(glut_single GL UT_RGB); glutcreatewindow("a sample OpenGL application"); glmatrixmode: Επιλέγει τo µητρώο που επιθυµούµενα τροποποιήσουµε (προβολής ή µετασχηµατισµού µοντέλου) glmatrixmode(gl_projection); gluortho2d(0,50,0,50); glutdisplayfunc(display); glutmainloop(); return 0;}

Ανάλυση παράδειγµατος (main) (7) int main(int argc, char** argv){ glutinit(&argc,argv); glutinitwindowposition(50,50); glutinitwindowsize(640,480); glutinitdisplaymode(glut_single GL UT_RGB); glutcreatewindow("a sample OpenGL application"); gluortho2d: ήλωση παράλληλης προβολής glmatrixmode(gl_projection); gluortho2d(0,50,0,50); glutdisplayfunc(display); glutmainloop(); return 0;}

Ανάλυση παράδειγµατος (main) (8) int main(int argc, char** argv){ glutinit(&argc,argv); glutinitwindowposition(50,50); glutinitwindowsize(640,480); glutinitdisplaymode(glut_single GL UT_RGB); glutcreatewindow("a sample OpenGL application"); glutdisplayfunc: ηλώνει τη συνάρτηση που θα εκτελείται κάθε φορά που απαιτείται σχεδιασµός της σκηνής glmatrixmode(gl_projection); gluortho2d(0,50,0,50); glutdisplayfunc(display); glutmainloop(); return 0;}

Ανάλυση παράδειγµατος (main) (9) int main(int argc, char** argv){ glutinit(&argc,argv); glutinitwindowposition(50,50); glutinitwindowsize(640,480); glutinitdisplaymode(glut_single GL UT_RGB); glutcreatewindow("a sample OpenGL application"); glmatrixmode(gl_projection); gluortho2d(0,50,0,50); glutmainloop: Ενεργοποιεί τον κύκλο ακρόασης γεγονότων glutdisplayfunc(display); glutmainloop(); return 0;}

Ανάλυση παραδείγµατος (display) (1) glclearcolor: ήλωση χρώµατος καθαρισµού της οθόνης void display() { glclearcolor(1,1,1,0); glclear(gl_color_buffer_bit); glcolor3f(1,0,0); glbegin(gl_lines); glvertex2i(20,20); glvertex2i(40,40); glend(); glflush(); }

Ανάλυση παραδείγµατος (display) (2) glclear: Καθαρισµός οθόνης (καθαρισµός ενός από τους ενταµιευτές του συστήµατος γραφικών) void display() { glclearcolor(1,1,1,0); glclear(gl_color_buffer_bit); glcolor3f(1,0,0); glbegin(gl_lines); glvertex2i(20,20); glvertex2i(40,40); glend(); glflush(); }

Ανάλυση παραδείγµατος (display) (3) void display() { glclearcolor(1,1,1,0); glclear(gl_color_buffer_bit); glcolor*: Επιλογή χρώµατος σχεδίασης glcolor3f(1,0,0); glbegin(gl_lines); glvertex2i(20,20); glvertex2i(40,40); glend(); glflush(); }

Ανάλυση παραδείγµατος (display) (4) void display() { glclearcolor(1,1,1,0); glclear(gl_color_buffer_bit); glcolor3f(1,0,0); glbegin/glend: Μεταξύ αυτών των εντολών δηλώνονται συντεταγµένες κορυφών γεωµετρικών σχηµάτων. Το είδος των σχηµάτων καθορίζεται απότοόρισµατης glbegin. glbegin(gl_lines); glvertex2i(20,20); glvertex2i(40,40); glend(); glflush(); }

Ανάλυση παραδείγµατος (display) (5) void display() { glclearcolor(1,1,1,0); glclear(gl_color_buffer_bit); glcolor3f(1,0,0); glvertex*: ήλωση συντεταγµένων µεµονωµένων κορυφών. glbegin(gl_lines); glvertex2i(20,20); glvertex2i(40,40); glend(); glflush(); }

Ανάλυση παραδείγµατος (display) (6) void display() { glclearcolor(1,1,1,0); glclear(gl_color_buffer_bit); glcolor3f(1,0,0); glbegin(gl_lines); glvertex2i(20,20); glvertex2i(40,40); glend(); glflush: Προωθεί την εκτέλεση εντολών που εκκρεµούν. glflush(); }

Αποτέλεσµα παραδείγµατος

Τέλος ενότητας!