Слайд 2
Структура простої OpenGL-програми (на базі консольного-проекту бібліотека
glut)
Заголовкові файли, оголошення функцій
та змінних
#include
#include
#include
#include
// файли glut32.lib та glut32.dll – в теці проекту
void display(void);
void resize(int,int);
2. Функцій main() програми
void main()
{ glutInitWindowPosition(50, 10);
glutInitWindowSize(400, 400);
glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE );
glutCreateWindow( "GLUT Template" );
glutIdleFunc(display);
glutDisplayFunc(display);
glutReshapeFunc(resize);
/* Enter your cod here */
glutMainLoop();
}
3. Функції resize() та display()
void resize(int width,int height)
{ glViewport(0,0,width,height);
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho(-5,5, -5,5, 2,12);
gluLookAt( 0,0,5, 0,0,0, 0,1,0 );
glMatrixMode(GL_MODELVIEW);
}
void display(void)
{ glClearColor(1.0,1.0,1.0,1.0);
glClear(GL_COLOR_BUFFER_BIT|
GL_DEPTH_BUFFER_BIT);
glTranslated(0.0005,0,0);
glRotated(45.0,1.0,0.0,0.0);
glColor3d(1,0,0);
glutWireSphere(1, 15,15);
glutSwapBuffers();
}
Слайд 3
Синтаксис команд та основні типи OpenGL
Функції та процедури
OpenGL, зазвичай, називають командами
Усі команди OpenGL мають префікс gl,
а кожна назва функції починається з великої літери, наприклад glColor(), glPushMatrix().
Узагальнений вигляд команди OpenGL:
rtype CommandName [1 2 3 4] [b s i f d us ui] [v] (atype arg)
де:
CommandName – ім’я OpenGL-команди,
наприклад glVertex;
[1 2 3 4] – кількість аргументів;
[b s i f d us ui] – тип аргументів;
[v] – вектор, rtype – тип що повертається.
atype та arg - типом та кількість аргументів.
Варіанти запису команди glVertex:
glVertex2d, glVertex2f, glVertex3d, glVertex3i,
glVertex4s, glVertex2dv, glVertex2fv….
Константи OpenGL записують великими літерами,
наприклад GL_COLOR_BUFFER_BIT.
Слайд 4
Команди відображення графічних примітивів OpenGL
вершини графічних об’єктів OpenGL
визначаються командою glVertex*():
void glVertex [2 3 4] [s i
f d] v (type coord); // приклад – glVertex2i(0, -4);
glVertex*() визначається чотирма координатами: x, y, z та w.
glVertex2() задає x, y, z =0, w=1. glVertex3() задає x, y, z, w=1,
glVertex4() усі 4 координати. w враховує перспективу.
Примітив OpenGL – простий графічний об’єкт (точка, лінія, багатокутник, растрове зображення), яким можна маніпулювати як єдиною дискретною сутністю.
Поточний колір об’єкта разом з умовами освітлення визначає сумарний колір, який поширюється на всі пізніше створювані примітиви – до встановлення нового.
Команди кольору:
void glColor [3 4] [b s i f d][v] (GLtype components); // встановлення RGBA-кольору
void glIndex [3 4] [s i f d] v (GLtype index); // індексний режим кольору
glColor3f (0.0, 0.0, 0.0); // black glColor3f (1.0, 0.0, 0.0); // red glColor3f (0.0, 1.0, 0.0); // green
Альфа-параметр визначає ступінь прозорості: 0.0 – відсутня, 1.0 – повна.
Слайд 5
Команди відображення графічних примітивів OpenGL
За допомогою наборів вершин
задаються примітиви або групи примітивів: точки, лінії, з’єднані лінії,
замкнені лінії, трикутники різного типу, позв’язані та непозв’язані чотирикутники, полігони.
Формування набору точок забезпечується комбінацією команд glBegin() / glEnd():
void glBegin (GLenum mode); // початок послідовності
void glEnd ( ); // кінець послідовності
Всередині комбінації команд glBegin() / glEnd() окрім вершин встановлюються: колір, вектор нормалі, координати текстур, властивості матеріалу, виклик списків. Використання інших команд не допускається.
Стандартно точка відображується як окремий піксель, лінія - ширину 1 піксель. Нестандартні значення задаються функціями glPointSize() та glLineWidth():
void glPointSize (GLfloat size); // size – ширина точки у пікселях
void glLineWidth (GLfloat width); // width – ширина лінії у пікселях
Слайд 6
Команди відображення графічних примітивів OpenGL
І
Слайд 7
Команди відображення графічних примітивів OpenGL
Приклад з незалежними лініями:
glLineWidth(5.0);
glBegin(GL_LINES);
glColor3f(0.0,0.0,1.0);
glVertex3f(5.0f,0.0f,0.0f); glVertex3f(0.0f,5.0f,0.0f);
glColor3f(1.0,1.0,0.0);
glVertex3f(0.0f,0.0f,0.0f); glVertex3f(5.0f,5.0f,0.0f);
glEnd();
Приклад з пов’язаними лініями:
glLineWidth(10.0);
glBegin(GL_LINE_STRIP);
glColor3f(1.0,0.0,1.0);
glVertex2i(0,5); glVertex2i(5,5);
glVertex2i(5,0); glVertex2i(10,0);
glEnd();
Слайд 8
Команди відображення графічних примітивів OpenGL
Приклад із замкненою лінією:
glLineWidth(15.0);
glBegin(GL_LINE_LOOP);
glColor3f(0.0,1.0,0.0);
for(int i=0;i
1
glColor3f(0.0,1.0,1.0);
glVertex2f(-0.2,0.0); glVertex2f(-5.0,0.0); glVertex2f(-2.5,-5.0); // 2
glEnd();
Слайд 9
Команди відображення графічних примітивів OpenGL
Приклад із пов’язаними трикутниками:
glBegin(GL_TRIANGLE_STRIP);
glColor3f(1.0,0.5,0.0);
glVertex2f(0.0,0.0); glVertex2f(-2.5,-5.0);
glColor3f(1.0,0.0,1.0);
glVertex2f(-5.0,0.0); glVertex2f(-7.5,-5.0);
glColor3f(0.0,1.0,0.0);
glVertex2f(-10.0,0.0);
glEnd();
Приклад із веєром трикутників:
glBegin(GL_TRIANGLE_FAN);
glColor3f(0.5,0.5,0.0);
glVertex2i(0,0);
glVertex2i(-2,3); glVertex2i(2,3);
glColor3f(0.0,0.0,1.0);
glVertex2i(4,0);
glColor3f(1.0,1.0,0.0);
glVertex2i(2,-3);
glEnd();
Слайд 10
Команди відображення графічних примітивів OpenGL
Приклад із незалежними чотирикутниками:
glBegin(GL_QUADS);
glColor3f(1.0,0.0,0.0);
glVertex2i(0,0); glVertex2i(0,4); glVertex2i(4,4); glVertex2i(4,0);
glColor3f(0.0,1.0,0.0);
glVertex3i(0,0,0); glVertex3i(0,4,0); glVertex3i(0,4,4); glVertex3i(0,0,4);
glEnd();
Приклад із пов’язаними чотирикутниками:
glBegin(GL_QUAD_STRIP);
glColor3f(1.0,0.0,0.0);
glVertex2i(0,0); glVertex2i(-2,0); glVertex2i(0,2); glVertex2i(-2,4);
glColor3f(0.0,1.0,0.0);
glVertex2i(3,2); glVertex2i(3,4);
glEnd();
Слайд 11
Команди відображення графічних примітивів OpenGL
Приклад із полігоном (правильний
шостикутник):
glBegin(GL_POLYGON);
glColor3f(0.0,0.5,1.0);
for(int i=0;i
glVertex2i(3,-3);
glVertex2i(-3,-3); glVertex2i(-5,0); // glVertex(5,0);
glVertex2i(-3,3); glVertex2i(3,3);
glEnd();