2 ο εργαστήριο
DESCRIPTION
2 ο εργαστήριο. OpenGL Σύνταξη Εντολών. Οι εντολές OpenGL χρησιμοποιούν το πρόθεμα gl και κεφαλαίο το πρώτο γράμμα κάθε λέξης . Οι OpenGL σταθερές αρχίζουν με GL_, και χρησιμοποιούνται κεφαλαία η ‘_’ για το διαχωρισμό των λέξεων. glVertex3f(…). OpenGL πρόθεμα. εντολή. - PowerPoint PPT PresentationTRANSCRIPT
2ο εργαστήριο
1
OpenGL Σύνταξη Εντολών
Οι εντολές OpenGL χρησιμοποιούν το πρόθεμα gl και κεφαλαίο το πρώτο γράμμα κάθε λέξης.
Οι OpenGL σταθερές αρχίζουν με GL_, και χρησιμοποιούνται κεφαλαία η ‘_’ για το διαχωρισμό των λέξεων.
2
glVertex3f(…)
OpenGL πρόθεμα
εντολή πλήθος παραμέτρ.
τύπος παραμέτρ.
Τύποι δεδομένων
3
OpenGL Type Internal representation C-Language TypeSuffix
GLbyte 8-bit integer signed char bGLshort 16-bit integer short sGLint, GLsizei 32-bit integer int or long iGLfloat 32-bit floating float fGLflampf pointerGLfouble 64-bit floating double dGLclampd pointerGlubyte 8-bit unsigned integer unsigned char ubGLuboolean 8-bit unsigned integer unsigned char ubGLushort 16-bit unsigned integer unsigned short
usGLuint, GLenum 32-bit unsigned integer unsigned long uiGLbitfield 32-bit unsigned integer
Διαχείριση καταστάσεων
Η OpenGL είναι μηχανή καταστάσεων.– Η αλλαγή μιας κατάστασης παραμένει μέχρι
να ξανα-αλλαχθεί.– Η κάθε κατάσταση έχει μια δεδομένη τιμή.– Κάθε στιγμή μπορούμε να πάρουμε από το
σύστημα την τρέχουσα τιμή.
4
Διαχείριση καταστάσεων
– glEnable(GLenum), glDisable(GLenum)• Ενεργοποίηση και απενεργοποίηση κάποιας
κατάστασης.– glIsEnabled(GLenum)
• Ερώτηση αν η κατάσταση είναι ενεργοποιημένη
– glGetBooleanv(), glGetIntegerv(), glGetFloatv(), glGetDoublev(), glGetPointerv()• Ζητείται η τρέχουσα τιμή
– OpenGL Programming Guide : Appendix B
5
Αναπαράσταση Χρώματος
RGBA– 4 κανάλια: Red, Green, Blue, and Alpha.– Κάθε κανάλι παίρνει τιμές 0.0 ~ 1.0
• Τιμές εκτός των ορίων αποδίδονται στο 0.0 ή 1.0.
• Το Alpha χρησιμοποιείται στο συνδυασμό και τη διαφάνεια
• Π.x. glColor4f(0.0, 1.0, 0.0, 1.0); // Green
glColor4f(1.0, 1.0, 1.0, 1.0); // White
6
Παράδειγμα#include <GL/glut.h>
void GL_display() {
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f (-1.0, -1.0, 0.0);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f (1.0, -1.0, 0.0);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f (1.0, 1.0, 0.0);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f (-1.0, 1.0, 0.0);
glEnd();
glFlush();
}
7
Παράδειγμαvoid GL_reshape(GLsizei w, GLsizei h) {
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2.0f, 2.0f, -2.0f, 2.0f, -2.0f, 2.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow("Drawing Sample");
glutDisplayFunc(GL_display);
glutReshapeFunc(GL_reshape);
glutMainLoop();
}
8
Παράδειγμα
9