Γραθικά με Υπολογιζηές



Σχετικά έγγραφα
ΚΕΦ. 2.3 ΑΠΟΛΤΣΗ ΣΘΜΗ ΠΡΑΓΜΑΣΘΚΟΤ ΑΡΘΘΜΟΤ

TOOLBOOK (μάθημα 2) Δεκηνπξγία βηβιίνπ θαη ζειίδσλ ΠΡΟΑΡΜΟΓΗ: ΒΑΛΚΑΝΙΩΣΗ ΔΗΜ. ΕΚΠΑΙΔΕΤΣΙΚΟ ΠΕ19 1 TOOLBOOK ΜΑΘΗΜΑ 2

ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ. Οξηδόληηα θαη θαηαθόξπθε κεηαηόπηζε παξαβνιήο

H ΜΑΓΕΙΑ ΤΩΝ ΑΡΙΘΜΩΝ

Δξγαζηεξηαθή άζθεζε 03. Σηεξενγξαθηθή πξνβνιή ζην δίθηπν Wulf

Απαντήσεις θέματος 2. Παξαθάησ αθνινπζεί αλαιπηηθή επίιπζε ησλ εξσηεκάησλ.

ΠΑΡΑΡΣΗΜΑ Δ. ΔΤΡΔΗ ΣΟΤ ΜΔΣΑΥΗΜΑΣΙΜΟΤ FOURIER ΓΙΑΦΟΡΩΝ ΗΜΑΣΩΝ

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙ ΜΟ

Απνηειέζκαηα Εξσηεκαηνινγίνπ 2o ηεηξάκελν

ΑΛΛΑΓΗ ΟΝΟΜΑΣΟ ΚΑΙ ΟΜΑΔΑ ΕΡΓΑΙΑ, ΚΟΙΝΟΥΡΗΣΟΙ ΦΑΚΕΛΟΙ ΚΑΙ ΕΚΣΤΠΩΣΕ ΣΑ WINDOWS XP

Σκιές. Οη ζθηέο ζπλεηζθέξνπλ πνιύ ζηελ αίζζεζε ξεαιηζκνύ κηα ζθελήο θαη βνεζνύλ ζηελ αληίιεςε ηεο ζρεηηθήο ζέζεο ησλ αληηθεηκέλσλ.

Constructors and Destructors in C++

x-1 x (x-1) x 5x 2. Να απινπνηεζνύλ ηα θιάζκαηα, έηζη ώζηε λα κελ ππάξρνπλ ξηδηθά ζηνπο 22, 55, 15, 42, 93, 10 5, 12

Να ζρεδηάζεηο ηξόπνπο ζύλδεζεο κηαο κπαηαξίαο θαη ελόο ιακπηήξα ώζηε ν ιακπηήξαο λα θσηνβνιεί.

Η/Υ A ΤΑΞΕΩΣ ΑΕ Συστήματα Αρίθμησης. Υποπλοίαρχος Ν. Πετράκος ΠΝ

Αζκήζεις ζτ.βιβλίοσ ζελίδας 13 14

Δξγαιεία Καηαζθεπέο 1 Σάμε Σ Δ.Κ.Φ.Δ. ΥΑΝΙΧΝ ΠΡΧΣΟΒΑΘΜΙΑ ΔΚΠΑΙΓΔΤΗ. ΔΝΟΣΗΣΑ 11 ε : ΦΧ ΔΡΓΑΛΔΙΑ ΚΑΣΑΚΔΤΔ. Καηαζθεπή 1: Φαθόο κε ζσιήλα.

Image J Plugin particle tracker για παρακολούθηση της κίνησης σωματιδίων

ΜΙΓΑΔΙΚΟΙ ΑΡΙΘΜΟΙ: έζησ

Ενδεικτικά Θέματα Στατιστικής ΙΙ

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

ΥΡΙΣΟΤΓΔΝΝΙΑΣΙΚΔ ΚΑΣΑΚΔΤΔ

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΤΙΚΗ ΣΚΥΤΑΛΟΓΡΟΜΙΑ 2015 ΓΙΑ ΤΟ ΓΥΜΝΑΣΙΟ Τεηάπηη 28 Ιανουαπίου 2015 ΛΔΥΚΩΣΙΑ Τάξη: Α Γυμναζίου

ΔΠΙΣΡΟΠΗ ΓΙΑΓΩΝΙΜΩΝ 74 ος ΠΑΝΔΛΛΗΝΙΟ ΜΑΘΗΣΙΚΟ ΓΙΑΓΩΝΙΜΟ ΣΑ ΜΑΘΗΜΑΣΙΚΑ Ο ΘΑΛΗ 19 Οκηωβρίοσ Δνδεικηικές λύζεις

ΡΤΘΜΙΕΙ ΔΙΚΣΤΟΤ ΣΑ WINDOWS

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙΜΟ Α ΛΤΚΔΙΟΤ. Ημεπομηνία: 10/12/11 Ώπα εξέτασηρ: 09:30-12:30 ΠΡΟΣΔΙΝΟΜΔΝΔ ΛΤΔΙ

Κεθάλαιο 7. Πξνζθνξά ηνπ θιάδνπ Μ. ΨΥΛΛΑΚΗ

ΓΗΑΓΩΝΗΣΜΑ ΣΤΑ ΜΑΘΖΜΑΤΗΚΑ. Ύλη: Μιγαδικοί-Σσναρηήζεις-Παράγωγοι Θεη.-Τετν. Καη Εήηημα 1 ο :

Α. Εηζαγσγή ηεο έλλνηαο ηεο ηξηγσλνκεηξηθήο εμίζσζεο κε αξρηθό παξάδεηγκα ηελ εκx = 2

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

ΑΠΛΟΠΟΙΗΗ ΛΟΓΙΚΩΝ ΤΝΑΡΣΗΕΩΝ ΜΕ ΠΙΝΑΚΕ KARNAUGH

ΚΔΦ. 2.4 ΡΗΕΔ ΠΡΑΓΜΑΣΗΚΩΝ ΑΡΗΘΜΩΝ

Παιχνίδι γλωζζικής καηανόηζης με ζχήμαηα!

ΟΠΤΙΚΗ Α. ΑΝΑΚΛΑΣΖ - ΓΗΑΘΛΑΣΖ

Άσκηση 1 - Μοπυοποίηση Κειμένου

ΓΔΧΜΔΣΡΙΑ ΓΙΑ ΟΛΤΜΠΙΑΓΔ

4) Να γξάςεηε δηαδηθαζία (πξόγξακκα) ζηε Logo κε όλνκα θύθινο πνπ ζα ζρεδηάδεη έλα θύθιν. Λύζε Γηα θύθινο ζηθ επαλάιαβε 360 [κπ 1 δε 1] ηέινο

ΔΕΟ 13. Ποσοτικές Μέθοδοι. θαη λα ππνινγίζεηε ην θόζηνο γηα παξαγόκελα πξντόληα. Να ζρεδηαζηεί γηα εύξνο πξντόλησλ έσο

α) ηε κεηαηόπηζε x όηαλ ην ζώκα έρεη κέγηζην ξπζκό κεηαβνιήο ζέζεο δ) ην κέγηζην ξπζκό κεηαβνιήο ηεο ηαρύηεηαο

Βάσεις Δεδομέμωμ. Εξγαζηήξην V. Τκήκα Πιεξνθνξηθήο ΑΠΘ

ΜΑΘΗΜΑΣΑ ΦΩΣΟΓΡΑΦΙΑ. Ειζαγωγή ζηη Φωηογραθία. Χριζηάκης Σαζεΐδης EFIAP

ΜΑΘΗΜΑΤΙΚΑ ΘΔΤΙΚΗΣ ΚΑΙ ΤΔΦΝΟΛΟΓΙΚΗΣ ΚΑΤΔΥΘΥΝΣΗΣ Β ΛΥΚΔΙΟΥ ΤΔΣΤ(1) ΣΤΑ ΓΙΑΝΥΣΜΑΤΑ

Σύνθεζη ηαλανηώζεων. Έζησ έλα ζώκα πνπ εθηειεί ηαπηόρξνλα δύν αξκνληθέο ηαιαληώζεηο ηεο ίδηαο ζπρλόηεηαο πνπ πεξηγξάθνληαη από ηηο παξαθάησ εμηζώζεηο:

Οδηγίες τρήζης για λειηοσργία μεηαθοράς καναλιών ζε υηθιακό δέκηη OST-7060 HD

Άμεσοι Αλγόριθμοι: Προσπέλαση Λίστας (list access)

Σήκαηα Β Α Γ Γ Δ Λ Η Σ Ο Ι Κ Ο Ν Ο Μ Ο Υ Γ Ι Α Λ Δ Ξ Η - ( 2 ) ΕΙΣΑΓΨΓΗ ΣΤΙΣ ΤΗΛΕΠΙΚΟΙΝΨΝΙΕΣ

ΜΑΘΗΜΑΣΑ ΦΩΣΟΓΡΑΦΙΑ. Εισαγωγή στη Φωτογραυία. Χριζηάκης Σαζεΐδης - EFIAP

Μονοψϊνιο. Αγνξά κε ιίγνπο αγνξαζηέο. Δύναμη μονοψωνίος Η ηθαλόηεηα πνπ έρεη ν αγνξαζηήο λα επεξεάζεη ηελ ηηκή ηνπ αγαζνύ.

iii. iv. γηα ηελ νπνία ηζρύνπλ: f (1) 2 θαη

Γ ΣΑΞΖ ΔΝΗΑΗΟΤ ΛΤΚΔΗΟΤ ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΘΔΣΗΚΩΝ ΚΑΗ ΟΗΚΟΝΟΜΗΚΩΝ ΠΟΤΓΩΝ ΤΝΑΡΣΖΔΗ ΟΡΗΑ ΤΝΔΥΔΗΑ (έως Θ.Bolzano) ΘΔΜΑ Α

ΘΔΚΑ ΡΖΠ ΑΛΑΓΛΩΟΗΠΖΠ

ΑΠΑΝΤΗΣΔΙΣ ΓΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ II ΔΠΑΛ

Δξγαιεία Καηαζθεπέο 1 Σάμε Δ Δ.Κ.Φ.Δ. ΥΑΝΗΩΝ ΠΡΩΣΟΒΑΘΜΗΑ ΔΚΠΑΗΓΔΤΖ. ΔΝΟΣΖΣΑ 2 ε : ΤΛΗΚΑ ΩΜΑΣΑ ΔΡΓΑΛΔΗΑ ΚΑΣΑΚΔΤΔ. Καηαζθεπή 1: Ογθνκεηξηθό δνρείν

Γοκή επαλάιευες Δληοιές Όζο & Μέτρης_όηοσ

ΘΔΜΑ 1 ο Μονάδες 5,10,10

f '(x)g(x)h(x) g'(x)f (x)h(x) h'(x) f (x)g(x)

Hellas online Προεπιλεγμένες ρσθμίσεις για FritzBox Fon WLAN 7140 (Annex B) FritzBox Fon WLAN Annex B ( )

Έλαο πίνακας σσμβόλων ππνζηεξίδεη δύν βαζηθέο ιεηηνπξγίεο:

Αιγόξηζκνη Γνκή επηινγήο. Πνιιαπιή Δπηινγή Δκθωιεπκέλεο Δπηινγέο. Δηζαγωγή ζηηο Αξρέο ηεο Δπηζηήκεο ηωλ Η/Υ. introcsprinciples.wordpress.

ΣΕΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΕΥΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΥΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ Ρέππα Μαξγαξίηα

Αζθήζεηο 5 νπ θεθαιαίνπ Crash course Step by step training. Dipl.Biol.cand.med. Stylianos Kalaitzis

ΕΝΤΟΛΕΣ WINDOWS ΚΑΙ UNIX

(Ενδεικηικές Απανηήζεις) ΘΔΜΑ Α. Α1. Βιέπε απόδεημε Σει. 262, ζρνιηθνύ βηβιίνπ. Α2. Βιέπε νξηζκό Σει. 141, ζρνιηθνύ βηβιίνπ

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Γ Γυμνασίου ΥΟΛΕΙΟ..

Q Η ζσνάρηηζη μέζοσ κόζηοσς μας δίνει ηο κόζηος ανά μονάδα παραγωγής. Q Η ζσνάρηηζη μέζοσ κόζηοσς μας δίνει ηο ζηαθερό κόζηος ανά μονάδα παραγωγής

Επωηήζειρ Σωζηού Λάθοςρ ηων πανελλαδικών εξεηάζεων Σςναπηήζειρ

Ηλεκηπονικά Απσεία και Διεπαθέρ

ΣΥΣΤΗΜΑΤΑ ΑΛΓΕΒΡΑ Α ΛΥΚΕΙΟΥ. 1. Να ιπζνύλ ηα ζπζηήκαηα. 1 0,3x 0,1y x 3 3x 4y 2 4x 2y ( x 1) 6( y 1) (i) (ii)

Αντισταθμιστική ανάλυση

ΑΝΤΗΛΙΑΚΑ. Η Μηκή ζθέθηεθε έλαλ ηξόπν, γηα λα ζπγθξίλεη κεξηθά δηαθνξεηηθά αληειηαθά πξντόληα. Απηή θαη ν Νηίλνο ζπλέιεμαλ ηα αθόινπζα πιηθά:

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΣΑΞΖ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ Γευηέρα 11 Ηουνίου 2018 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ. (Ενδεικηικές Απανηήζεις)

x x x x tan(2 x) x 2 2x x 1

ΠΛΗ36. Άσκηση 1. Άσκηση 2. Οη δηεπζύλζεηο ησλ 4 σλ ππνδηθηύσλ είλαη νη αθόινπζεο. Υπνδίθηπν Α: /27 Υπνδίθηπν Β:

Άζκηζη ζτέζης κόζηοσς-τρόνοσ (Cost Time trade off) Καηαζκεσαζηική ΑΔ

Δπηιέγνληαο ην «Πξνεπηινγή» θάζε θνξά πνπ ζα ζπλδέεζηε ζηελ εθαξκνγή ζα βξίζθεζηε ζηε λέα ρξήζε.

Πολυεπίπεδα/Διασυμδεδεμέμα Δίκτυα

ΣΥΝΤΕΤΑΓΜΕΝΕΣ ΣΤΟ ΕΠΙΠΕΔΟ

Έκδοζη /10/2014. Νέα λειηοσργικόηηηα - Βεληιώζεις

Κευάλαιο 8 Μονοπωλιακή Συμπεριφορά- Πολλαπλή Τιμολόγηση

Φςζική Πποζαναηολιζμού Γ Λςκείος. Αζκήζειρ Ταλανηώζειρ 1 ο Φςλλάδιο

ΣΕΙ Δυτικήσ Μακεδονίασ, Παράρτημα Καςτοριάσ Τμήμα Πληροφορικήσ και Τεχνολογίασ Υπολογιςτών

ΠΑΝΕΛΛΑΔΙΚΕ ΕΞΕΣΑΕΙ Γ ΣΑΞΗ ΗΜΕΡΗΙΟΤ ΓΕΝΙΚΟΤ ΛΤΚΕΙΟΤ & ΠΑΝΕΛΛΗΝΙΕ ΕΞΕΣΑΕΙ Γ ΣΑΞΗ ΗΜΕΡΗΙΟΤ ΕΠΑΛ (ΟΜΑΔΑ Β )

Κεθάιαην 20. Ελαχιστοποίηση του κόστους

Case Study. Παξαθάηω παξνπζηάδνπκε βήκα - βήκα κε screenshots έλα παξάδεηγκα ππνβνιήο κηαο εξγαζίαο θαη ηελ παξαγωγή ηνπ Originality Report.

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ Γεσηέρα 10 Ηοσνίοσ 2019 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ. (Ενδεικηικές Απανηήζεις)

Ζαχαρίας Μ. Κοντοπόδης Εργαστήριο Λειτουργικών Συστημάτων ΙΙ

Α Ο Κ Η Α Μ Α Ζ Η Η Ρ Η ( S E A R C H )

Πως να δημιουργήσετε ένα Cross-Over καλώδιο

ΣΟ ΑΠΛΟ ΕΚΚΡΕΜΕ. Σν απιό εθθξεκέο απνηειείηαη από κηα κάδα m ζηελ άθξε αβαξνύο. λήκαηνο κήθνπο L,ηνπ νπνίνπ ην άιιν άθξν είλαη εμαξηεκέλν ζε αθιόλεην

ΔΝΓΔΙΚΤΙΚΔΣ ΛΥΣΔΙΣ ΣΤΑ ΜΑΘΗΜΑΤΙΚΑ ΚΑΤΔΥΘΥΝΣΗΣ Γ ΛΥΚΔΙΟΥ ΓΔΥΤΔΡΑ 27 ΜΑΪΟΥ 2013

ΔΝΓΔΙΚΣΙΚΔ ΛΤΔΙ ΣΑ ΜΑΘΗΜΑΣΙΚΑ ΠΡΟΑΝΑΣΟΛΙΜΟΤ 2017

Intel Accelerate Your Code

Τν εθπαηδεπηηθό πιηθό ηεο Φξνληηζηεξηαθήο Δθπαίδεπζεο Τζηάξα δηαλέκεηαη δωξεάλ απνθιεηζηηθά από ηνλ ψεθηαθό ηόπν ηνπ schooltime.gr

ΛΙΜΝΗ ΤΣΑΝΤ. Σρήκα 1. Σρήκα 2

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΣΑΞΖ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ ΚΑΗ ΔΠΑΛ ΣΔΣΑΡΣΖ 25 ΜΑΨΟΤ 2016 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΑΡΥΔ ΟΗΚΟΝΟΜΗΚΖ ΘΔΧΡΗΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ - ΔΠΗΛΟΓΖ

ΔΦΑΡΜΟΜΔΝΑ ΜΑΘΗΜΑΣΙΚΑ ΣΗ ΧΗΜΔΙΑ Ι ΘΔΜΑΣΑ Α επηέκβξηνο Να ππνινγηζηνύλ νη κεξηθέο παξάγσγνη πξώηεο ηάμεο ηεο ζπλάξηεζεο f(x,y) =

Διαηιμήζεις για Αιολικά Πάρκα. Κώδικες 28, 78 και 84

ΓΙΑΙΡΔΣΟΣΗΣΑ. Οπιζμόρ 1: Έζηω d,n. Λέκε όηη ν d δηαηξεί ηνλ n (ζπκβνιηζκόο: dn) αλ. ππάξρεη c ηέηνην ώζηε n. Θεώπημα 2: Γηα d,n,m,α,b ηζρύνπλ:

Κεθάλαιο 10 Ολιγοπώλιο

Μέζνδνη ραξαθηεξηζκνύ πιηθώλ Δξγαζηεξηαθή άζθεζε 8: Μαγλεηηθέο Μεηξήζεηο Ηκεξνκελία δηεμαγσγήο: 26/5/2010

Transcript:

Ηόνιο Πανεπιζηήμιο, Τμήμα Πληροθορικής Γραθικά με Υπολογιζηές Δργαζηήριο 4 Υθές Σην εξγαζηήξην απηό ζα δνύκε ην πώο εθαξκόδνπκε θαη πσο παξακεηξνπνηνύκε πθέο (textures) ζε αληηθείκελα ζηελ OpenGL. Υθές ζηην OpenGL Γηα λα απμήζεη ηελ ξεαιηζκό θαηά ηελ απεηθόληζε αληηθεηκέλσλ, ε OpenGL ππνζηεξίδεη κηα δεκνθηιή ηερληθή πνπ νλνκάδεηαη απεηθόληζε κε πθέο (texture mapping). Μηα πθή κπνξεί λα είλαη κηα νπνηαδήπνηε εηθόλα ηεο νπνία ην κέγηζην κέγεζνο εμαξηάηαη από ηηο δπλαηόηεηα ηνπ πιηθνύ (θάξηα γξαθηθώλ) πνπ ππνζηεξίδεη ηελ OpenGL. Η πθή κπνξεί λα εθαξκνζηεί ζε έλα αληηθείκελν επηπιένλ ηνπ θσηηζκνύ θαη ηνπ ρξσκαηηζκνύ (Smooth ή Flat). Δθαρμογή σθής ζε ένα ανηικείμενο Η OpenGL κπνξεί λα εθαξκόζεη κηα πθή ζε νπνηνδήπνηε αληηθείκελν ζηελ ζθελή αξθεί λα ηεο πνύκε πώο λα αληηζηνηρήζεη ζεκεία ζην αληηθείκελν κε texels ηεο πθήο. Απηό γίλεηαη κέζσ ελόο δεύγνπο αξηζκώλ πνπ ιέγνληαη ζπληεηαγκέλεο πθήο (texture coordinates) (s,t). Τν δεύγνο s,t παίξλεη ηηκέο από ην δηάζηεκα [0,1]. To δεύγος (s,t) δελ είλαη άιιο από ηο γλφζηό δεύγος (u,v) ποσ ζα βρείηε ζηελ βηβιηογραθία. Έλα δεύγνο ζπληεηαγκέλσλ (s,t) αληηζηνηρεί ζε θάζε θνξπθή (vertex) ηνπ αληηθεηκέλνπ πξηλ ηελ εθαξκνγή ηεο πθήο. (0,1) (1,1) (0,1) (1,1) (0,0) (1,0) (0,0) (1,0) Σηελ γεληθή πεξίπησζε ε πθή δελ ζα ηαηξηάδεη απόιπηα ζηελ γεσκεηξία καο, αιιά έλα κηθξό ηκήκα ηεο ζα εθαξκόδεηαη ζ απηή. Κώζηας Αναγνώζηου Σελίδα 1 9/12/2008

Γηα παξάδεηγκα θαληαζηείηε όηη ην αληηθείκελν καο είλαη ηξηγσληθό. Τόηε ε εθαξκνγή ηεο πθήο ζην ηξίγσλν ζα είλαη θάπσο έηζη: (0,1) (0.5,1) (1,1) (0.5,1) (0,0) (1,0) (0,0) (1,0) Γηα λα θαζνξίζνπκε ην δεύγνο ζπληεηαγκέλσλ (s,t) θάζε θνξπθήο ρξεζηκνπνηνύκε ηελ εληνιή: void gltexcoord2f(glfloat s, GLfloat t); Τελ εληνιή απηή ηελ θαινύκε ηελ ζηηγκή πνπ δειώλνπκε ηηο θνξπθέο ελόο αληηθεηκέλνπ. Γηα παξάδεηγκα όηαλ θαηαζθεπάδνπκε έλα ηεηξάγσλν: glbegin(gl_quads); gltexcoord2f(0.0f, 1.0f); glvertex3f(-10, 10, -10); gltexcoord2f(1.0f, 1.0f); glvertex3f(10, 10, -10); gltexcoord2f(1.0f, 0.0f); glvertex3f(10, 10, 10); gltexcoord2f(0.0f, 0.0f); glvertex3f(-10, 10, 10); glend(); Γημιοσργώνηας μια σθή Σηελ γεληθή πεξίπησζε νη πθέο είλαη εηθόλεο (jpg, bmp, png, tga) πνπ θνξηώλνπκε από ην δίζθν ζε θάπνηα πεξηνρή ζηελ κλήκε. Από ηελ ζηηγκή πνπ έρνπκε ηελ πεξηνρή απηή πνπ θξαηά ηα bytes ηεο εηθόλαο θαζώο θαη ην κέγεζνο ηεο κπνξνύκε λα δεκηνπξγήζνπκε κηα πθή ζηελ OpenGL θαιώληαο ηελ εληνιή: void glteximage2d(glenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, void *data); Ελδηαθέξνλ ζε απηή ηελ εληνιή έρνπλ νη παξάκεηξνη width, height πνπ είλαη ε αλάιπζε ηεο εηθόλαο, ε internalformat πνπ δειώλεη ηη ζέινπκε λα αληηπξνζσπεύεη θάζε texel ηεο πθήο θαη θπζηθά ε data πνπ παίξλεη ηα bytes ηεο εηθόλαο. Η παξάκεηξνο internalformat κπνξεί λα πάξεη ηηο εμήο ηηκέο: Κώζηας Αναγνώζηου Σελίδα 2 9/12/2008

internalformat GL_RGB GL_RGBA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_ALPHA Ερκελεία Κάζε texel ζα αληηπξνζωπεύεη έλα ρξώκα RGB Κάζε texel ζα αληηπξνζωπεύεη έλα ρξώκα RGB θαη δηαθάλεηα A Κάζε texel ζα αληηπξνζωπεύεη θωηεηλόηεηα Κάζε texel ζα αληηπξνζωπεύεη θωηεηλόηεηα θαη δηαθάλεηα A Κάζε texel ζα αληηπξνζωπεύεη κόλν δηαθάλεηα A Οη παράκεηροη width θαη height κηας εηθόλας ποσ ζέιοσκε λα κεηαηρέυοσκε ζε σθή πρέπεη λα είλαη δσλάκεης ηοσ 2 γηα εθδόζεης ηες OpenGL κηθρόηερες ηης 2.0 Η πθή δεκηνπξγήζεθε, αιιά πνύ; Πσο ζα ηελ ρξεζηκνπνηήζνπκε, ζα αιιάμνπκε ηηο παξακέηξνπο ηεο θαη πσο ζα ηελ εθαξκόζνπκε ζε έλα αληηθείκελν; Η OpenGL γηα λα κπνξέζνπκε λα απνζεθεύζνπκε θαη λα δηαρεηξηζηνύκε κηα πθή καο δίλεη ηελ δπλαηόηεηα λα θαηαζθεπάζνπκε έλα ανηικείμενο σθής (texture object). Έλα αληηθείκελν πθήο είλαη κηα πεξηνρή ζηελ κλήκε πνπ εθηόο από ηα bytes ηεο εηθόλαο ηεο πθήο θξαηά θαη πνιιέο άιιεο πιεξνθνξίεο όπσο κέγεζνο, κέζνδνο θηιηξαξίζκαηνο θαηά ηελ κεγέζπλζε θαη ζκίθξπλζε, αλ έρεη mipmap θα. Γηα λα δεκηνπξγήζνπκε έλα αληηθείκελν πθήο αξθεί λα θαιέζνπκε ηελ εληνιή: glgentextures(gluint numtextures, GLuint* textureid ); Η εληνιή ζα δεκηνπξγήζεη ην αληηθείκελν θαη ζα καο επηζηξέςεη κηα αλαθνξά ζηελ πθή (έλαο κνλαδηθόο αθέξαηνο αξηζκόο). Με βάζε απηή ηνλ αξηζκό αλαθνξάο κπνξνύκε λα δηαρεηξηζηνύκε πιήξσο κηα πθή. Η παξάκεηξνο numtextures καο επηηξέπεη λα δεκηνπξγήζνπκε παξαπάλσ ηνπ ελόο αληηθείκελα πθήο ηαπηόρξνλα. Σ απηή ηε πεξίπησζε ε εληνιή ζα επηζηξέςεη έλα πίλαθα κε ηνπο αξηζκνύο αλαθνξάο. Παξάδεηγκα γηα λα θνξηώζνπκε ηελ εηθόλα ηεο πθήο ελεξγνπνηνύκε ην αληηθείκελν πθήο θαη θαινύκε ηελ glteximage2d() όπσο αλαθέξακε παξαπάλσ: glgentextures(1, &textureid ); glbindtexture(gl_texture_2d, textureid); glteximage2d(gl_texture_2d, ); Η ελεξγνπνίεζε ηνπ αληηθεηκέλνπ πθήο γίλεηαη κε ηελ εληνιή glbindtexture() πνπ παίξλεη σο παξάκεηξν ηνλ αξηζκό αλαθνξάο ηνπ αληηθεηκέλνπ όπσο εμεγήζακε παξαπάλσ. Η παξάκεηξνο GL_TEXTURE_2D πνπ ζα δείηε θαη ζε παξαθάησ εληνιέο δηαρείξηζεο πθώλ ιέεη όηη νη πθέο καο είλαη δηδηάζηαηεο εηθόλεο. Υπάξρεη δπλαηόηεηα ζηελ OpenGL λα ρξεζηκνπνηήζνπκε επίζεο θαη κνλνδηάζηαηεο ή ηξηδηάζηαηεο εηθόλεο σο πθέο. Οποηεδήποηε τρεηαζηεί λα θάλοσκε κηα αιιαγή ζηης παρακέηροσς κηα σθής πρέπεη προεγοσκέλφς λα ελεργοποηήζοσκε ηο αληηθείκελο σθής κε ηελ τρήζε ηες εληοιής glbindtexture(); Κώζηας Αναγνώζηου Σελίδα 3 9/12/2008

Παραμεηροποίηζη μιας σθής Κάζε πθή κπνξεί λα παξακεηξνπνηεζεί σο πξνο ην πώο ζα ζπκπεξηθεξζεί θαηά ηελ κεγέζπλζε/ζκίθξπλζε, θαη ηνλ ηξόπν κε ηνλ νπνίν ζα εθαξκνζηεί ζε έλα αληηθείκελν. Γηα λα ζέζνπκε κηα παξάκεηξν ηεο πθήο πξέπεη πξώηα λα ελεξγνπνηήζνπκε ην αληηθείκελν πθήο κε ηελ εληνιή glbindtexture() θαη έπεηηα θαιώληαο θάπνηα από ηηο εληνιέο: void gltexparameterf(glenum target, GLenum pname, GLfloat param); void gltexparameteri(glenum target, GLenum pname, GLint param); void gltexparameterfv(glenum target, GLenum pname, GLfloat *params); void gltexparameteriv(glenum target, GLenum pname, GLint *params); Η δηαθνξά κεηαμύ ηνπο έγθεηηαη ζην ηη ηύπν παξακέηξνπ δέρνληαη (float ή integer) θαη αλ δέρνληαη έλα αξηζκό ή έλα δηάλπζκα αξηζκώλ (vector). H παξάκεηξνο target είλαη πάληα GL_TEXTURE_2D ζηελ ζπγθεθξηκέλε εθαξκνγή (πθέο 2 δηαζηάζεσλ). Με ηελ ρξήζε απηήο ηεο εληνιήο κπνξνύκε λα ζέζνπκε γηα παξάδεηγκα ηνλ ηύπν θηιηξαξίζκαηνο ηεο πθήο όηαλ απηή κεγεζύλεηαη: gltexparameteri(gl_texture_2d, GL_TEXTURE_MAG_FILTER, GL_NEAREST); Η GL_NEAREST ζα εθαξκόζεη ηελ κέζνδν «ηνπ θνληηλόηεξνπ γείηνλα (nearest neighbour)» θαηά ηελ δεηγκαηνιεςία ηεο πθήο πνπ νδεγεί ζε aliasing ζηελ εηθόλα ηνπ αληηθεηκέλνπ (είλαη νξαηά ηα pixel). Αλη απηήο κπνξνύκε λα ρξεζηκνπνηήζνπκε ηελ ηηκή GL_LINEAR πνπ νδεγεί ζε δηγξακκηθή παξεκβνιή (bilinear interpolation) κεηαμύ ησλ texel ηεο πθήο θαη νκαιόηεξα απνηειέζκαηα ζηελ εηθόλα ηνπ αληηθεηκέλνπ. Κοντινότερο texel Ζ μέθοδος ηοσ κονηινόηεροσ γείηονα Γιγραμμική παρεμβολή texel Αληηζηνίρσο κπνξνύκε λα ζέζνπκε θαη ην είδνο θηιηξαξίζκαηνο ηεο πθήο θαηά ηελ ζκίθξπλζε ηεο κε ηελ παξάκεηξν GL_TEXTURE_MIN_FILTER. Καη απηή δέρεηαη ηηο ηηκέο GL_NEAREST θαη GL_LINEAR. Μπνξνύκε επίζεο λα θαζνξίζνπκε ην πώο ζα ζπκπεξηθεξζεί ε πθή όηαλ νη ζπληεηαγκέλεο πθήο πέθηνπλ έμσ από ην δηάζηεκα [0,1]. Μπνξνύκε λα νξίζνπκε ηελ ζπκπεξηθνξά γηα θάζε ζπληεηαγκέλε πθήο αλεμάξηεηα κε ηηο παξακέηξνπο GL_TEXTURE_WRAP_S θαη GL_TEXTURE_WRAP_T. Οη πνην ζπλήζεηο ηηκέο πνπ ρξεζηκνπνηνύκε κε απηέο ηηο παξακέηξνπο είλαη νη GL_REPEAT θαη GL_CLAMP. Κώζηας Αναγνώζηου Σελίδα 4 9/12/2008

Η GL_REPEAT νξίδεη όηη όηαλ κηα ζπληεηαγκέλε s,t γίλεη κεγαιύηεξε ηνπ 1, ηόηε σο ηηκή ηνπ s,t ζα ρξεζηκνπνηεζεί ην δεθαδηθό κέξνο ηνπ αξηζκνύ. Γηα παξάδεηγκα αλ (s,t)=(2.3, 4.5) ηόηε ζαλ ζπληεηαγκέλε πθήο ζα ρξεζηκνπνηεζεί ην (0.3, 0.5). Μπνξείηε λα θαληαζηείηε όηη αλ ζπληεηαγκέλεο ζπλερίζνπλ λα απμάλνληαη γξακκηθά απηό ζα νδεγήζεη ζε κηα επαλάιεςε ηεο εηθόλαο (REPEAT) ηεο πθήο. Η GL_CLAMP νξίδεη όηη όηαλ κηα ζπληεηαγκέλε s,t γίλεη κεγαιύηεξε ηνπ 1 ε ηηκή ηεο ζα κέλεη ζην 1. Γηα παξάδεηγκα αλ (s,t)=(2.3, 4.5) ηόηε ζαλ ζπληεηαγκέλε πθήο ζα ρξεζηκνπνηεζεί ην (1, 1). Mipmapping Η ηερληθή mipmapping δεκηνπξγεί πνιιέο δηαθνξεηηθέο εθδόζεηο ηεο αξρηθήο πθήο ζε κηθξόηεξεο αλαιύζεηο. Καηά ηελ εθαξκνγή ηεο πθήο ζην αληηθείκελν, ε OpenGL επηιέγεη κηα αλάιπζε ηεο πθήο πνπ ηαηξηάδεη θαιύηεξα ζην κέγεζνο ηνπ αληηθεηκέλνπ ζηελ πθή θαη ηελ εθαξκόδεη, αληί ηνπ λα εθαξκόδεη πάληα ηελ ίδηα κεγάιε πθή. Έλα mipmap κηαο πθήο έρεη απηή ηελ κνξθή: Κάζε επίπεδν πεξηέρεη κηα έθδνζε ηεο πθήο ηνπ πξνεγνύκελνπ επηπέδνπ 4 θνξέο κηθξόηεξε (4 texel ζε έλα επίπεδν ζπλδπάδνληαη γηα λα δεκηνπξγήζνπλ 1 texel ζην επόκελν επίπεδν). Απηό δεκηνπξγεί κηα ζπλνιηθή αύμεζε ηνπ κεγέζνπο ηεο πθήο θαηά 33% πεξίπνπ. Η ηερληθή mipmapping ιύλεη ην πξόβιεκα ηεο ζσζηήο ζκίθξπλζεο κηαο πθήο όηαλ πξέπεη λα εθαξκνζηεί ζε καθξηλά αληηθείκελα θαζώο θαη επηηαρύλεη ηελ εθαξκνγή ηεο πθήο ζ απηά ηα αληηθείκελα ιόγσ ηνπ έρεη λα δεηγκαηνιεπηίζεη πθέο κηθξήο αλάιπζεο. Η OpenGL κπνξεί λα δεκηνπξγήζεη έλα mipmap κηαο πθήο απηόκαηα κε ηελ εληνιή int glubuild2dmipmaps(glenum target, GLint internalformat, GLint width, GLint height, GLenum format, GLenum type, const void *data); Οη παξάκεηξνη ηεο εληνιήο απηήο είλαη ίδηεο κε ηεο εληνιήο glteximage2d() πνπ είδακε πην πξηλ. Πξνϋπνζέηεη όηη έρνπκε θνξηώζεη ηελ εηθόλα ηεο πθήο ζε κηα Κώζηας Αναγνώζηου Σελίδα 5 9/12/2008

πεξηνρή κλήκεο θαη όηη πξηλ έρνπκε δεκηνπξγήζεη θαη ελεξγνπνηήζεη έλα αληηθείκελν πθήο. H OpenGL ζηελ γεληθή πεξίπησζε ζπλδπάδεη δπν texel από γεηηνληθέο πθέο ζην mipmap γηα λα παξάγεη έλα ρξώκα. Μπνξνύκε λα θαζνξίζνπκε επαθξηβώο ην ζα γίλεηαη απηόο ν ζπλδηαζκόο. Απηό εμαξηάηαη από ην είδνο θηιηξαξίζκαηνο πνπ νξίδνπκε γηα ην mipmap κε ηελ γλσζηή εληνιή gltexparameteri(), κέζσ ησλ παξακέηξσλ GL_TEXTURE_MAG_FILTER θαη GL_TEXTURE_MIN_FILTER. Γηα έλα mipmap έρνπκε ηηο εμήο επηινγέο θηιηξαξίζκαηνο: Τηκή GL_NEAREST GL_LINEAR Ερκελεία Θα εθαξκνζηεί ε κέζνδνο nearest neighbour ζηελ αξρηθή (πιήξεο αλάιπζεο) πθή κόλν Θα εθαξκνζηεί ε κέζνδνο bilinear interpolation ζηελ αξρηθή (πιήξεο αλάιπζεο) πθή κόλν GL_NEAREST_MIPMAP_NEAREST Επέιεμε ηελ θνληηλόηεξε πθή ζην mipmap θαη εθάξκνζε ηελ κέζνδν nearest neighbour GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_NEAREST GL_LINEAR_MIPMAP_LINEAR Εθάξκνζε γξακκηθή παξεκβνιή κεηαμύ δπν επηπέδωλ ζην mipmap θαη έπεηηα εθάξκνζε ηε κέζνδν nearest neighbour ζην απνηέιεζκα Επέιεμε ηελ θνληηλόηεξε πθή ζην mipmap θαη εθάξκνζε ηελ κέζνδν γξακκηθήο παξεκβνιήο Εθάξκνζε γξακκηθή παξεκβνιή κεηαμύ δπν επηπέδωλ ζην mipmap θαη έπεηηα εθάξκνζε ηε κέζνδν γξακκηθήο παξεκβνιήο ζην απνηέιεζκα Η κέζνδνο GL_NEAREST_MIPMAP_NEAREST είλαη ε γξεγνξόηεξε κέζνδνο θηιηξαξίζκαηνο ελόο mipmap αιιά παξάγεη κέηξηα απνηειέζκαηα, ε GL_LINEAR_MIPMAP_LINEAR είλαη πην αξγή κέζνδνο, αιιά παξάγεη ηα θαιύηεξα απνηειέζκαηα. Μη ιζοηροπικό θιληράριζμα σθών (Anisotropic Filtering) Οη ζπλήζεηο κέζνδνη γηα ην θηιηξάξηζκα κηα πθήο είλαη όπσο είπακε ε κέζνδνο ηνπ θνληηλόηεξνπ γείηνλα (nearest neighbour) θαη ηεο δηγξακκηθήο παξεκβνιήο (bilinear interpolation). Καη νη δύν κέζνδνη ιακβάλνπλ ππόςε ηελ ηεηξάδα ησλ texel κέζα ζην νπνίν έλα pixel αληηζηνηρεί θαη κε ζπλδπαζκό (ή κε) απηή παξάγνπλ ην ρξώκα ηνπ pixel. Οη δπν κέζνδνη απνδίδνπλ θαιά όηαλ βιέπνπκε ηελ επηθάλεηα ζρεδόλ θάζεηα. Όηαλ βιέπνπκε ην αληηθείκελν κε κηθξή γσλία όκσο νη κέζνδνη θηιηξαξίζκαηνο απηνί θάλνπλ ηελ πθή λα δείρλεη ζνιή. Απηό ζπκβαίλεη γηαηί θαζώο ε γσλία ηεο επηθάλεηαο γίλεηαη κηθξή έλα pixel «θαιύπηεη» πεξηζζόηεξα texel ζηελ πθή, όκσο αθόκα ρξεζηκνπνηνύκε 4 texel γηα λα παξάγνπκε ην ρξώκα ελόο pixel (ιίγα δείγκαηα γηα κεγάιε επηθάλεηα πθήο). Απηόο ν ηύπνο θηιηξαξίζκαηνο ιέγεηαη ηζνηξνπηθόο γηαηί γίλεηαη πάληα κε ηνλ ίδην ηξόπν αλεμάξηεηα ηεο γσλίαο κε ηελ νπνία βιέπνπκε κηα επηθάλεηα. Η κε ηζνηξνπηθή κέζνδνο θηιηξαξίζκαηνο (anisotropic filtering), αιιάδεη ηνλ αξηζκό ησλ texel πνπ ρξεζηκνπνηεί γηα λα παξάγεη ην ρξώκα ελόο pixel κε βάζε ηελ γσλία Κώζηας Αναγνώζηου Σελίδα 6 9/12/2008

ζέαζεο. Έηζη γηα κηθξέο γσλίεο ρξεζηκνπνηεί πεξηζζόηεξα texel θαη νδεγεί ζε ιηγόηεξν ζόισκα ηεο εηθόλαο. Η κέζνδνο απηή είλαη αθξηβή ππνινγηζηηθά, αιιά παξάγεη ην θαιύηεξν απνηέιεζκα από θάζε είδνο θηιηξαξίζκαηνο πθήο πνπ είδακε κέρξη ηώξα. Γηα λα ελεξγνπνηήζνπκε anisotropic filtering ζηελ OpenGL αξθεί λα ζέζνπκε ηελ παξάκεηξν GL_TEXTURE_MAX_ANISOTROPY_EXT ζην αληηθείκελν πθήο. gltexparameterf(gl_texture_2d, GL_TEXTURE_MAX_ANISOTROPY_EXT, flargest); Η ηηκή ηεο παξακέηξνπ απηήο είλαη ην κέγηζην πνζό θηιηξαξίζκαηνο πνπ ζα ρξεζηκνπνηεζεί θαη εμαξηάηαη από ηελ θάξηα γξαθηθώλ. Τηκή 1.0 απελεξγνπνηεί ην anisotropic filtering. Σσνδσαζμός τρώμαηος σθής και τρώμαηος ανηικειμένοσ Είλαη δπλαηόλ λα εθαξκόζνπκε κηα πθή ζε έλα αληηθείκελν γηα ην νπνίν έρνπκε πξνεγνπκέλσο νξίζεη πιηθό θαη θσηίζεη. Η OpenGL καο παξέρεη κεξηθέο επηινγέο γηα ηνλ πσο κπνξνύκε λα ζπλδπάζνπκε ην ρξώκα πνπ έρεη πξνθύςεη από ηνλ θσηηζκό θαη ην ρξώκα πνπ καο δίλεη ε πθή. Οη παξάκεηξνη πνπ νξίδνπλ ηνλ ζπλδπαζκό ρξσκάησλ δίλνληαη κέζσ ησλ εληνιώλ: void gltexenvi(glenum target, GLenum pname, GLint param); void gltexenvf(glenum target, GLenum pname, GLfloat param); void gltexenviv(glenum target, GLenum pname, GLint *param); void gltexenvfv(glenum target, GLenum pname, GLfloat *param); Η δηαθνξά κεηαμύ ηνπο έγθεηηαη ζην ηη ηύπν παξακέηξνπ δέρνληαη (float ή integer) θαη αλ δέρνληαη έλα αξηζκό ή έλα δηάλπζκα αξηζκώλ (vector). Η παξάκεηξνο πνπ νξίδεη ηνλ ζπλδπαζκό ρξσκάησλ νλνκάδεηαη GL_TEXTURE_ENV_MODE. Κώζηας Αναγνώζηου Σελίδα 7 9/12/2008

Παξάδεηγκα αλ ζέινπκε ην ρξώκα πνπ πξνθύπηεη από ηνλ θσηηζκό λα πνιιαπιαζηάδεηαη(modulated) κε ην ρξώκα ηεο πθήο θαη ην απνηέιεζκα λα απεηθνλίδεηαη ζηελ νζόλε ηόηε: gltexenvi(gl_texture_env, GL_TEXTURE_ENV_MODE, GL_MODULATE); Άιιεο ηηκέο γηα ηελ παξάκεηξν απηή είλαη ε GL_REPLACE πνπ ζα αληηθαηαζηήζεη ην ρξώκα πνπ πξνέθπςε από ην θσηηζκό κε ην ρξώκα ηεο πθήο (δειαδή ν θσηηζκόο δελ ζα έρεη επίδξαζε ζην αληηθείκελν) θαη νη GL_ADD πνπ ζα πξνζζέζεη ηα δπν απηά ρξώκαηα. Μεηαζτημαηιζμοί ζσνηεηαγμένων σθής Οη ζπληεηαγκέλεο κηα πθήο κπνξνύλ λα κεηαζρεκαηηζηνύλ ζαλ λα ήηαλ ε πθή θαλνληθό αληηθείκελν, κέζσ ησλ εληνιώλ gltranslate(), glrotate() θαη glscale(). H OpenGL δηαηεξεί έλαλ μερσξηζηό πίλαθα κεηαζρεκαηηζκώλ γηα ηηο πθέο πνπ ζπζζσξεύεη όηη κεηαζρεκαηηζκό δεκηνπξγήζνπκε κε ηηο άλσ εληνιέο (αλάινγνο ηνπ GL_MODELVIEW). Ο πίλαθαο απηόο νλνκάδεηαη GL_TEXTURE θαη ελεξγνπνηείηαη κε ηελ εληνιή: glmatrixmode(gl_texture); Παξάδεηγκα αλ ζέινπκε λα κεηαθηλήζνπκε κηα πθή θαηά 0.5 ζε θάζε δηάζηαζε S, T αξθεί λα νξίζνπκε ηνλ κεηαζρεκαηηζκό: glmatrixmode(gl_texture); glloadidentity(); gltranslatef(0.5,0.5,0); πξηλ δσγξαθίζνπκε ην αληηθείκελν κε ηελ πθή. Τν πώο ζα θαλεί ε πθή κεηά ηνλ κεηαζρεκαηηζκό εμαξηάηαη από ηελ ηηκή πνπ έρνπκε ζέζεη ζηηο παξακέηξνπο GL_TEXTURE_WRAP_S θαη GL_TEXTURE_WRAP_T. Κώζηας Αναγνώζηου Σελίδα 8 9/12/2008

Δθαρμογή σθών ζηην OpenGL Σηελ ζεκεξηλή εξγαζηεξηαθή άζθεζε ζα εθαξκόζνπκε δηάθνξεο πθέο ζε αληηθείκελα ηεο ζθελήο θαη ζα ηηο παξακεηξνπνηήζνπκε. Φνξηώζηε ην project lab4.dev ζην πεξηβάιινλ αλάπηπμεο εθαξκνγώλ DevC++. Ο θώδηθαο ηεο εθαξκνγήο βξίζθεηαη ζην αξρείν main.cpp. Ο θώδηθαο πεξηέρεη ζρόιηα γηα όια ηα ζεκεία ηνπ πξνγξάκκαηνο πνπ καο ελδηαθέξνπλ. Κνκκάηηα ηνπ θώδηθα θαη άιιεο παξακεηξνπνηήζεηο δελ καο αθνξνύλ ζε απηή ηελ άζθεζε θαη κέλνπλ αζρνιίαζηα. Η εθαξκνγή αθνινπζεί ην γλσζηό ζθειεηό πνπ ρξεζηκνπνηνύκε ζηηο εξγαζηεξηαθέο αζθήζεηο. Οη αιιαγέο ζηελ ζεκεξηλή άζθεζε εζηηάδνληαη ζηελ ζπλάξηεζε αξρηθνπνίζεο init() θαη ζηελ ζπλάξηεζε πνπ δσγξαθίδεη ηελ ζθελή καο renderscene(): init() Σ απηή ηελ άζθεζε θνξηώλνπκε επηπιένλ ηηο πθέο πνπ ζα ρξεζηκνπνηήζνπκε: textures[texture_wall] = LoadBitmap("textures/brick.bmp"); textures[texture_sphere] = LoadBitmap("textures/stone1.bmp"); Η LoadBitmap() είλαη κηα βνεζεηηθή ζπλάξηεζε πνπ ρξεζηκνπνηνύκε γηα λα θνξηώζνπκε έλα αξρείν bmp από ην δίζθν θαη πνπ νξίδεηαη ζην αξρείν texture.cpp. Η ζπλάξηεζε LoadBitmap() αθνύ θνξηώζεη ηελ εηθόλα, δεκηνπξγεί έλα αληηθείκελν πθήο, δεκηνπξγεί ην mipmap γηα ηελ πθή θαη νξίδεη ηελ κέζνδνο θηιηξαξίζκαηνο: //Δεκηνύξγεζε έλα αληηθείκελν πθήο glgentextures(1, &textureid ); //ελεξγνπνίεζε ην αληηθείκελν πθήο glbindtexture(gl_texture_2d, textureid); //Δεκηνύξγεζε ην mipmap γηα απηή ηελ πθή glubuild2dmipmaps(gl_texture_2d, 4, infoheader.biwidth, infoheader.biheight, GL_RGBA, GL_UNSIGNED_BYTE, l_texture); //Όξηζε ηελ ζπκπεξηθνξά ηεο πθήο όηαλ νη s,t ζπληεηαγκέλεο είλαη έμω //από ην δηάζηεκα [0,1] gltexparameterf(gl_texture_2d, GL_TEXTURE_WRAP_S, GL_REPEAT); gltexparameterf(gl_texture_2d, GL_TEXTURE_WRAP_T, GL_REPEAT); //Όξηζε ηελ κεζνδν θηιηξαξίζκαηνο ηεο πθήο gltexparameterf(gl_texture_2d, GL_TEXTURE_MAG_FILTER, GL_LINEAR); gltexparameterf(gl_texture_2d, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); //Όξηζε πώο ζα ρξεζηκνπνηνύκε ην ρξώκα ηεο πθήο ζε ζρέζε κε ην //ππάξρνλ ρξώκα ηεο επηθάλεηαο. gltexenvf(gl_texture_env, GL_TEXTURE_ENV_MODE, GL_MODULATE); Κώζηας Αναγνώζηου Σελίδα 9 9/12/2008

renderscene() Σηελ renderscene() ελεξγνπνηνύκε ηηο πθέο κε ηελ εληνιή glenable(gl_texture_2d) θαη δσγξαθίδνπκε θάζε αληηθείκελν (ηελ ζθαίξα θαη ην δσκάηην) ελεξγνπνηώληαο ηηο αληίζηνηρεο πθέο ηνπο. Γηα λα δσγξαθίζσ θάζε ηνίρν ηνπ δσκαηίνπ ρξεζηκνπνηώ ηηο εμήο εληνιέο: //δωγξάθηζε ηνλ ηνίρν glbindtexture(gl_texture_2d, textures[texture_wall2]); glbegin(gl_quads); vnormal[0] = 0; vnormal[1] = 0; vnormal[2] = -1; glnormal3fv(vnormal); //ζέζε ηηο ζπληεηαγκέλεο πθήο γηα απηή ηελ θνξπθή gltexcoord2f(0.0f, 1.0f); glvertex3f(-width, height, length); glnormal3fv(vnormal); gltexcoord2f(1.0f, 1.0f); glvertex3f(width, height, length); glnormal3fv(vnormal); gltexcoord2f(1.0f, 0.0f); glvertex3f(width, -height, length); glnormal3fv(vnormal); gltexcoord2f(0.0f, 0.0f); glvertex3f(-width, -height, length); glend(); Αξρηθά ελεξγνπνηώ ηελ πθή ηνπ ηνίρνπ θαη ζηελ ζπλέρεηα ηνλ δσγξαθίδσ ζαλ GL_QUAD (ηεηξάπιεπξν), νξίδνληαο γηα θάζε θνξπθή ηελ ζέζε ηεο glvertex3f(), ηηο ζπληεηαγκέλεο ηεο πθήο gltexcoord2f() θαζώο θαη έλα θαλνληθό δηάλπζκα πνπ ζα ρξεζηκνπνηεζεί θαηά ηνλ θσηηζκό glnormal3fv(). Φειριζμός προγράμμαηος Με ηα βελάκια (cursor keys) κπνξνύκε λα πεξηζηξέςνπκε πάλσ-θάησ θαη αξηζηεξάδεμηά ηελ θάκεξα. Με ηα πιήθηξα z,c κεηαθηλνύκε ηελ θάκεξα αξηζηεξά-δεμηά θαη κε ηα s,x ηελ κεηαθηλνύκε πίζσ-κπξνο. Επίζεο κε ην πιήθηξν a κπνξνύκε λα εκθαλίζνπκε θαη λα θξύςνπκε ην ζύζηεκα αμόλσλ ηνπ θόζκνπ καο. Με ην spacebar κπνξνύκε λα θάλνπκε ην θσο λα πεξηζηξέθεηαη γύξσ από ην αληηθείκελν καο. Πράγμαηα να δοκιμάζεηε Α) Εθαξκόζηε ηελ πθή TEXTURE_WALL ζηνλ «ηνίρν» Β) Παξνκνίσο εθαξκόζηε ηελ πθή TEXTURE_SPHERE ζην κνληέιν ηεο ζθαίξαο. Γ) Κνηηάμηε ηελ ζθαίξα κε ηελ πθή πέηξαο. Παξαηεξείζηε ηελ αλαθιάζεηο ηνπ θσηόο (γπαιάδεο) πάλσ ζηε ζθαίξα. Με ην spacebar πεξηζηξέςηε ην θσο ώζηε λα έξζεη πίζσ από ηη ζθαίξα θαη ζηακαηήζηε ην πάιη κε ην spacebar. Τη ζπκβαίλεη κε ηηο γπαιάδεο ηώξα; Κώζηας Αναγνώζηου Σελίδα 10 9/12/2008

Γ) Σηξέςηε ηελ θάκεξα πξνο ηνλ πέηξηλν ηνίρν (ζηα αξηζηεξά όπσο θνηηάεη αξρηθά) κε ηα βειάθηα. Μεηαθηλήζηε ηελ θάκεξα κπξνο-πίζσ (πιήηξα s-x). Τη παξαηεξείηε; Δ) Σηελ ζπλάξηεζε LoadBitmap() (αξρείν texture.cpp), αιιάμηε ηηο ηηκέο ησλ παξακέηξσλ θηιηξαξίζκαηνο gltexparameterf(gl_texture_2d, GL_TEXTURE_MAG_FILTER, GL_NEAREST); gltexparameterf(gl_texture_2d, GL_TEXTURE_MIN_FILTER, GL_NEAREST); δηαδνρηθά ζε GL_LINEAR (θάληε ην πξώηα γηα ην GL_TEXTURE_MAG_FILTER). Γπξίζηε ηελ θάκεξα πξνο ηνλ πέηξηλν ηνίρν όπσο πξηλ θαη κεηαθηλήζηε ηελ θάκεξα θνληά ζηνλ ηνίρν (θαη κεηά ηξαβήμηε ηελ πξνο ηα πίζσ). Τη παξαηεξείηε ηώξα ζρεηηθά κε ηελ επίδξαζε ηνπ bilinear interpolation θαηά ηελ κεγέζπλζε/ζκίθξπλζε κηαο πθήο; Ε) Αιιάμηε ηελ ηηκή ηεο παξακέηξνπ GL_TEXTURE_MIN_FILTER δηαδνρηθά ζε GL_NEAREST_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_NEAREST θαη GL_LINEAR_MIPMAP_ LINEAR δνθηκάδνληαο ην βήκα (B) γηα θάζε πεξίπησζε. Τη ζπκπεξάζκαηα βγάδεηε γηα ηηο ηερληθέο θηιηξαξίζκαηνο ηνπ mipmap; Ζ) Θέζηε ηηο κεζόδνπο θηιηξαξίζκαηνο ηηο πθήο ζε gltexparameterf(gl_texture_2d, GL_TEXTURE_MAG_FILTER, GL_LINEAR); gltexparameterf(gl_texture_2d, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); ζηελ ζπλάξηεζε LoadBitmap() Φέξηε ηελ θάκεξα ζηελ κία άθξε ηνπ ηνίρνπ κε ηα θόθθηλα ηνύβια θαη ζηξέςηε ηελ ώζηε λα θνηηά ζρεδόλ παξάιιεια κε απηόλ. Τη παξαηεξείηε ζρεηηθά κε ηελ πνηόηεηα ηεο πθήο ζην βάζνο ηνπ ηνίρνπ; Παηήζηε ην πιήθηξν f πνπ ελεξγνπνηεί/απελεξγνπνηεί ην anisotropic filtering. Τη παξαηεξείηε ζρεηηθά κε ηελ πνηόηεηα ηεο πθήο ηώξα; Πεξηεγεζείηε ζην δσκάηην θαη θνηηάμηε δηάθνξεο πθέο κε ή ρσξίο anisotropic filtering. Θ) Δνθηκάζηε λα εθαξκόζεηε ηνλ κεηαζρεκαηηζκό κεηαθίλεζεο θαηά ηνλ άμνλα ησλ X ζηελ πθή ηνπ παηώκαηνο. Ο πίλαθαο κεηαζρεκαηηζκνύ πθήο GL_TEXTURE είλαη ήδε ελεξγνπνηεκέλνο (κε ηελ glmatrixmode(gl_texture); ). Μπνξείηε απιά λα εθαξκόζεηε κηα κεηαθίλεζε κε ηνλ gltranslatef(). Έρεηε ζηελ δηάζεζε ζαο ηελ κεηαβιεηή a πνπ αιιάδεη κε ην ρξόλν. Πξνζνρή: λα ζώζεηε ηνλ GL_TEXTURE ζηε ζηνίβα κε glpushmatrix()/glpopmatrix() πξηλ εθαξκόζεηε ηνλ κεηαζρεκαηηζκό. Κώζηας Αναγνώζηου Σελίδα 11 9/12/2008