the modelview matrix
DESCRIPTION
The ModelView Matrix. Το modelview matrix στην ουσία είναι ένα σύστημα αξόνων που μας βοηθάει να τοποθετούμε και περιστρέφουμε αντικείμενα. Είναι ένας πίνακας 4 X 4 ο οποίος ή μετασχηματίζει κορυφές (vertices) ή μετασχηματίζεται ο ίδιος σε συνδυασμό με άλλους πίνακες. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/1.jpg)
The ModelView Matrix
• Το modelview matrix στην ουσία είναι ένα σύστημα αξόνων που μας βοηθάει να τοποθετούμε και περιστρέφουμε αντικείμενα.
• Είναι ένας πίνακας 4 X 4 ο οποίος ή μετασχηματίζει κορυφές (vertices) ή μετασχηματίζεται ο ίδιος σε συνδυασμό με άλλους πίνακες.
• Για να μετασχηματίσω μια κορυφή απλα πολλαπλασιάζω το modelview matrix με το σημείο και προκύπτει ένα νέο σημείο στον χώρο που είναι το τελικο αποτέλεσμα.
![Page 2: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/2.jpg)
Τhe Modelview Matrix
• Είναι το default matrix που μας μεταφέρει η OpenGL αλλα μπορούμε να μεταβούμε σε αυτο και με την βοήθεια της συνάρτησης. glMatrixMode(GL_MODELVIEW)
• Συνηθώς οταν αρχίζουμε το render code θέλουμε να μεταφερθούμε στο σημείο (0,0,0) του ModelView Matrix.Αυτο το κάνουμε με την χρήση της συνάρτησης glLoadIdentity()
![Page 3: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/3.jpg)
Translation
• Οταν μετακινώ ένα αντικείμενο απο ένα σημειο του χώρου σε ένα αλλο τοτε κάνω translation.
• Translation στην OpenGL μπορώ να κάνω με την βοήθεια της συνάρτησης glTranslate(d,f)(TYPE x,TYPE y,TYPE z).
• Ως ορίσματα η συνάρτηση δέχεται το ποσοστό μετακίνησης στους άξονες.
• Για παράδειγμα αμα είμαι στο σημείο 3,4,-10 και θέλω να πάω στο σημείο 7,-4,-5 θα περάσω ως όρισμα στην συνάρτηση glTranslatef(4,-8,5).
![Page 4: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/4.jpg)
Translation
• Παντα την πράξη του translation την εκτελούμε πριν ζωγραφίσουμε τα αντικειμενά μας.
• πχ.glLoadIdentity();glTranslatef(,4,-8,5)renderCube();
![Page 5: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/5.jpg)
Rotation
• Rotation κάνουμε οταν θέλουμε να περιστρέψουμε ένα αντικείμενο σε κάποιο άξονα.
• Oταν περιστρέφω ένα αντικείμενο γύρω απο έναν άξονα τοτε ο άξονας περιστροφής παραμένει σταθερός.
• Οταν περιστρέφω κατι τοτε το σύστημα αξόνων αλλάζει.• Στην ΟpenGL μπορώ να περιστρέψω ένα αντικείμενο με
την συνάρτηση glRotate(d,f)(TYPE angle,TYPE x,TYPE y,TYPE z).
![Page 6: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/6.jpg)
Rotation
• H συνάρτηση glRotate δέχεται ως ορίσματα την γωνία περιστροφής και το σημείο που γινέται (χ,y,z).
• Για παράδειγμα αν θέλω να περιστραφώ 90 μοίρες γύρω απο τον άξονα y τότε δίνω την εντολήglRotatef(90.0f,0.0,1.0,0.0).
• Η OpenGL στις περιστροφές πηγαίνει με counter-clockwise λογική δηλαδή αμα ήθελα να περιστραφώ κατα 90 μοίρες clockwise θα έδινα -90.0 ως όρισμα.
![Page 7: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/7.jpg)
Rotation
• Αν θέλω να περιστραφώ γύρω απο έναν άξονα περα των βασικών x,y,z αυτο που πρέπει να κάνω είναι να περάσω ως όρισμα στην συνάρτηση το σημείο που θέλω (χ,y,z).
• Μετα ο άξονας που σχηματίζεται απο την αρχή των αξόνων μέχρι το σημείο που έδωσα ως όρισμα είναι ο καινούργιος άξονας περιστροφής.
• Την glRotate απο και την glTranslate τις εκτελώ πριν το render code μου.
![Page 8: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/8.jpg)
Scale
• To scaling πρακτικά είναι η αλλαγή μεγέθους ενός αντικειμένου ή σύστημα αξόνων.
• Δηλαδή όταν εκτελώ πράξεις scaling τοτε στην ουσία πολλαπλασιάζω τις συντεταγμένες ενός σημείο με ενα scale factor και έχω το τελικό αποτέλεσμα.
• Scaling στην OpenGL πραγματοποιώ με την συνάρτησηglScale(d,f)(TYPE x,TYPE y,TYPE z).
![Page 9: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/9.jpg)
Scale
• H συνάρτηση glScale δέχεται ως όρισμα τις τιμές του scale factor για τους άξονες.
• Δηλαδή αν θέλω να ζωγραφίσω έναν κύβο διπλάσιο στον άξονα χ αλλά στους άλλους άξονες να μην αλλάξει το μέγεθος του τοτε θα δώσω glScalef(2.0,1.0,1.0).
• Aλλα άμα θέλω να κάνω shrink το αντικείμενο τοτε θα δώσω τιμές απο 0 μέχρι 1.
![Page 10: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/10.jpg)
Scale
• Aμα δώσω αρνητικές τιμές στον scale factor τοτε το αντικείμενο μας θα κάνει flip.
• Aυτο είναι ένα στοιχείο που βοηθάει πολύ οταν θέλω να έχω reflections.
![Page 11: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/11.jpg)
Matrix Stacks
• Μέχρι στιγμής έχουμε δει το modelview matrix,που στην ουσία είναι η κορυφή μιας στοίβας απο πίνακες(matrices).
• Υπάρχουν matrix stacks για όλα τα έιδη των πινάκων.Δηλαδή υπάρχει η projection matrix stack,texture matrix stack,color matrix stack κτλ.
• Αυτο γίνεται γιατι μας βοηθάει να κάνουμε διάφορες μεταμορφώσεις και μετα να πιστρέφουμε στην τελευταία αποθηκευμένη χωρίς να κάνω τις πράξεις για να επανέλθω.
![Page 12: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/12.jpg)
Matrix Stacks
Για παράδειγμα αμα είμαι στο σημείο 0,0,0 και κάνω Push Matrix και αμέσως μετα κάνω 2 πράξεις translate (10,0,0) και (10,5,3) τοτε θα βρίσκομαι στο σημείο (20,5,3).• Αμα κάνω pop απο την στοίβα τοτε θα ξαναμεταρφεθώ στο
σημείο (0,0,0) κτλ.
![Page 13: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/13.jpg)
Matrix Stacks
![Page 14: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/14.jpg)
Matrix Stacks
• Για να μεταφέρουμε ένα matrix στην στοίβα χρησιμοποιούμε την συνάρτηση glPushMatrix() ενώ για να κάνουμε Pop την συνάρτηση glPopMatrix().
• Aυτες η συναρτήσεις δεν δέχονται ορίσματα και τις εκτελούμε πριν απο μια πράξη translation,rotation,scale(glPushMatrix) και αμα θέλω να κάνω pop μετα απο ένα render code block.
![Page 15: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/15.jpg)
Texture Mapping
• Mέχρι τώρα χρησιμοποιούσαμε χρώματα στα αντικείμενα μας.
• Τα χρώματα ομως δεν δείχνουν και τόσο ωραία και είναι δύσκολο να έχουν έναν υψηλό βαθμό αληθοφάνειας.
• Χρησιμοποιώντας όμως την τεχνική του texture mapping μπορούμε να έχουμε μια δραματική αύξηση του ρεαλισμού στις σκηνές μας.
![Page 16: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/16.jpg)
Texture Mapping
• Texture mapping ονομάζουμε την τεχνική προσαρμογής μια εικόνας πάνω σε μια επιφάνεια.
• Ενά texture map είναι ένα ορθογώνιο που περιέχει χρωματικές πληροφορίες και κάθε χρωματικό στοιχείο ονομάζεται texel.
• Μπορεί ένα texture map να είναι ένα ορθογώνιο ομως προσαρμόζεται και σε αλλες επιφάνειες με την χρήση texture coordinates.
![Page 17: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/17.jpg)
Παράδειγμα Texture Map
![Page 18: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/18.jpg)
Texture Mapping
• Ένα τυπικό texture map είναι μια δισδιάστατη εικόνα με ύψος και πλάτος.
• Αλλα μερικά effects μπορούν να χρησιμοποιούν ειτε 1-dimension map ειτε τρισδιάστατα maps με πλάτος,ύψος και βάθος.
![Page 19: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/19.jpg)
Texture Mapping in OpenGL
• Για να μπορώ να προσαρμόσω ένα tex map πάνω σε μια επιφάνεια με την χρήση της OpenGL θα πρέπει πρώτα να εκτελέσω καποια βήματα
• Το πρώτο βήμα που πρέπει να κάνω είναι να ορίσω το texture container.
![Page 20: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/20.jpg)
Binding a Texture Map
• Για να μπορέσω να ορίσω ένα tex container θα πρέπει να χρησιμοποιήσω την συνάρτηση glGenTextures(GLsizei n,GLuint *tex);
• H συνάρτηση glGenTextures δέχεται ως όρισμα των αριθμό των unique “names” που θα δημιουργήσει για τα texture containers και το δευτέρο ονόμα είναι ποια είναι αυτα τα “names”.
![Page 21: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/21.jpg)
Binding a Texture Map
• Για παράδειγμα
GLuint mytexture;glGenTextures(1,&mytexture);
GLuint many_textures[3];glGenTextures(3,many_textures);
![Page 22: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/22.jpg)
Binding a Texture Map
• Και αφού έχω δημιουργήσει ένα texture container με unique name πρέπει να καλέσω την συνάρτηση glBindTexture(GLenum target,GLuint texture) για να το ορίσω.
• Για παράδειγμα glBindTexture(GL_TEXTURE_2D,mytexture);
• H παράμετρος target μπορεί να πάρει τις τιμές GL_TEXTURE_(1D,2D,3D)GL_TEXTURE_CUBE_MAPTEXTURE_(1D,2D)_ARRAY.
![Page 23: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/23.jpg)
Binding a Texture Map
• Oι τιμές που περνάμε στο target βοηθάνε την OpenGL να προσδιορίσει την δίασταση του texture.
• Μπορούμε να αλλάξουμε τον τύπο ενος texture θέτοντας αλλο target ως όρισμα.
![Page 24: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/24.jpg)
Texture Mapping
• Επόμενο βήμα είναι να αντιστοιχίσουμε τα στοιχεία της εικόνας με το texture container φορτώνοντας από ένα αρχείο εικόνας.
• Αυτο μπορούμε να το κάνουμε με την βοήθεια μιας οικογένειας συναρτήσεων που μας παρέχει η OpenGL.glTexImage(1,2,3)Dανάλογα τις διαστάσεις ενός texture.
![Page 25: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/25.jpg)
Tex Image
• void glTexImage2D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * data);
• Η συνάρτηση glTexImage2D μεταφέρει τα στοιχεία μιας εικόνας σε ένα 2D texture container.
![Page 26: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/26.jpg)
Tex Image
• Tα ορίσματα της συνάρτησης είναι τα εξής:target:Το ίδιο με την συνάρτηση bind(GL_TEXTURE_2D κτλ.).• level:Χρησιμοποιήτε για την παραγωγή mipmaps με διάφορα στάδια
λεπτομέρειας.Αμα περάσουμε τον αριθμό 0 τοτε δεν παράγουμε mipmaps.
• InternalFormat:Καθορίζει τον αριθμό και το τύπο απο τα στοιχεία του texture.Δηλαδη απο ποσα χρώματα αποτελουνται τα δεδομένα του texture.Πχ. Μια παράμετρος είναι η GL_RGBA8 που είναι και η ποιο συνηθησμένη που λέει στην ουσία 4 χρώματα απο 8 bit το καθένα.
• Οι παράμετροι width & height και border(0 ή 1) είναι oι διαστάσεις της εικόνας.
• Και οι παράμετροι format & type καθορίζoυν το πως θα είναι τα pixels στην εικόνα που θα περάσουμε ως όρισμα στην τελευταία παράμετρο data.
![Page 27: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/27.jpg)
Παράδειγμα
• glTexImage2D (GL_TEXTURE_2D,0,GL_RGBA8,128,128,0,GL_RGBA,GL_UNSIGNED_BYTE,imagedata).
• Aυτο θα μας παράξει ένα texture χωρίς mipmaps,με 8 bit για το κάθε κανάλι,128 width,128 height,0 border με χρωματικά δεδομένα RGBA που θα αποθηκευτούν ως ένας πίνακας unsigned byte.
![Page 28: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/28.jpg)
Tex Image
• H συναρτήσεις glTexImage1D και glTexImage3D δουλεύουν με τον ίδιο τρόπο.
• Απλός στην 1D δεν έχουμε ύψος και στην 3D έχουμε και βάθος.
![Page 29: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/29.jpg)
Texture Filtering
• Oταν προσαρμόζω μια εικόνα πάνω σε ένα πολύγωνο τοτε το ποιο πιθανό είναι κάθε texel του texture να αντιστοιχίζεται με ένα pixel.
• Εαν όμως φέρω το αντικείμενο μου κοντά στην οθόνη τοτε ένα pixel θα είναι ένα μερος ενος texel ή αντίθετα αμα πάω το αντικείμενο μου ποιο μακριά τότε ένα pixel θα περιέχει παραπάνω απο ένα texel.
• Aυτα τα φαινόμενα λέγονται magnifιcation & minifιcation αντιστοίχα.
![Page 30: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/30.jpg)
Texture Filtering
• H ΟpenGL σε αυτες τις περιπτώσεις πρέπει να υπολογίσει το χρώμα του pixel.
• Το πως θα γίνει αυτο απο την OpenGL το καθορίζουμε με χρησιμοποιώντας Texture Filtering.
• Αυτο μπορούμε να το κάνουμε με τις συναρτήσεις.glTexParameteri(i,f)(GLenum target,GLenum pname,TYPE param)glTexParameteri(i,f)v(GLenum target,GLenum pname,TYPE param)
![Page 31: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/31.jpg)
Texture Filtering
• H παράμετρος target είναι η ιδία με τις υπόλοιπες GL_TEXTURE_2D.
• Η παράμετρος pname παίρνει 2 τιμές GL_TEXTURE_MAG_FILTER ή GL_TEXTURE_MIN_FILTER ανάλογα την περίπτωση.
• Eφόσον έχουμε ορίσει το target και pname η παράμετρος param παίρνει και αυτη κυριως 2 τιμές(εαν δεν έχω mipmaps).
![Page 32: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/32.jpg)
Nearest Filtering
• Εαν θέσω το mag_filter να είναι GL_NEAREST τοτε λέω στην OpenGL να χρησιμοποιεί το texel που είναι ποιο κοντά στο κέντρο του pixel.
• Aυτη η μέθοδος είναι γνωστή επίσης ως point sample.
![Page 33: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/33.jpg)
Nearest Filtering
• Είναι η ποιο φθηνή μέθοδος filtering απο άποψη πολυπλοκοτητας.
• Αλλα μπορεί να παράγει φαινόμενα τετραγονοποιήσης ενός texture.
![Page 34: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/34.jpg)
Nearest Filtering
![Page 35: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/35.jpg)
Linear Filtering
• Οταν λεω στην OpenGL να χρησιμοποιήσει GL_LINEAR ως mag_filter τοτε λέω να πάρει κατα καποιον τρόπο το μέσο όρο των χρωμάτων απο τα 4 texel που είναι ποιο κοντά στο κέντρο του pixel.
• Αυτη η τεχνική λέγεται και bilinear filtering.
![Page 36: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/36.jpg)
Linear Filtering
• Mε αυτη την τεχνική καταπολεμάμε σε μεγάλο βαθμό το φαινόμενο τον blocky textures.
![Page 37: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/37.jpg)
Linear Filtering
![Page 38: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/38.jpg)
Texture Filtering
• Οσο αναφόρα τα mig filters οι επιλογές είναι οι ίδιες μονο που έχει και τις ίδιες επιλογές για τα mipmaps.
• Πχ. GL_LINEAR_MIPMAP_LINEARΕδω διαλέγει τα 2 mipmaps ποιο κοντά στην ανάλυση του πολυγώνου και μετα μέσω γραμμικού interpolation βγαζει το τελικό χρώμα.
• Αυτη η τεχνική είναι γνωστή και ως trilinear filtering.
![Page 39: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/39.jpg)
Texture Coordinates
• Tα textures είναι ορθογώνια που πρέπει με κάποιο τρόπο να μπορούν να τοποθετηθούν πάνω σε οποιοδήποτε πολύγωνο.
• Τα texture coordinates δείχνουν ποιο κομμάτι του texture θα “πατήσει” πάνω σε ένα πολύγωνο.
![Page 40: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/40.jpg)
Texture Coordinates
• Κάθε γώνια του texture έχει 2D συντεταγμένες (0.0,0.0) για την κάτω αριστερα γωνία και (1.0,1.0) για την πάνω δεξιά.
• Οι συνταταγμένες ενος texture καθορίζονται ανα vertex οταν κάνουμε render ένα primitive.
![Page 41: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/41.jpg)
Texture Coordinates
![Page 42: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/42.jpg)
Texture Coordinates
• Οταν αναφερόμαστε σε συντεταγμένες ενός πολυγώνου τοτε τις αναφέρουμε ως x,y,z,w
• Στα textures είναι s(u),t(v),r,q.• Τα textures μπορούν να προσαρμοστούν
κατάλληλα πάνω σε ένα πολύγωνο ετσι ώστε να φαίνεται μονο το texture ως τελικό αποτέλεσμα.
![Page 43: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/43.jpg)
Texture Coordinates
• Για παράδειγμα έχουμε ένα τεράγωνο που αποτελείται απο 2 τρίγωνα
• Αμα τοποθετήσω το texture σωστά πάνω σε κάθε τρίγωνο θα φαίνεται ομοιόμορφο και θα καλύπτει όλο το πολύγωνο.
• Εαν όμως δώσω τις ίδιες συντεταγμένες για το texture στις κοίνες γωνίες.
• Εαν έκανα το αντιθέτο το αποτέλεσμα δεν θα ήταν ίδιο λόγο της διαγωνίου.
![Page 44: The ModelView Matrix](https://reader035.vdocuments.pub/reader035/viewer/2022062517/56813db2550346895da77ae4/html5/thumbnails/44.jpg)
Texture Coordinates