За мен | Александър Пенев - opengl · 2017. 10. 6. · gl_points Точки...
TRANSCRIPT
OpenGLOpenGL
Изграждане наИзграждане наГеометрични обектиГеометрични обекти
гл. ас. д-р А. Пенев
2/43OpenGL - Изграждане на Геометрични обекти
Изчистване на ИзображениетоИзчистване на Изображението (1/3) (1/3)
void glClear(GLbitfield mask)void glClear(GLbitfield mask)
mask:mask:
GL_COLOR_BUFFER_BITGL_COLOR_BUFFER_BIT на Цветана Цвета
GL_DEPTH_BUFFER_BITGL_DEPTH_BUFFER_BIT на Дълбочинатана Дълбочината
GL_ACCUM_BUFFER_BITGL_ACCUM_BUFFER_BIT на Натрупванена Натрупване
GL_STENCIL_BUFFER_BITGL_STENCIL_BUFFER_BIT на Маскатана Маската
3/43OpenGL - Изграждане на Геометрични обекти
Изчистване на Изображението (2Изчистване на Изображението (2/3/3))
void glClearColor(GLclampf red,void glClearColor(GLclampf red,GLclampf green, GLclampf blue,GLclampf green, GLclampf blue,GLclampf alpha)GLclampf alpha)
ПримерПример::
glClearColorglClearColor(0,0,0,0);(0,0,0,0);
glClear(glClear(GL_COLOR_BUFFER_BITGL_COLOR_BUFFER_BIT | |GL_DEPTH_BUFFER_BITGL_DEPTH_BUFFER_BIT););
4/43OpenGL - Изграждане на Геометрични обекти
Изчистване на Изображението (3Изчистване на Изображението (3/3/3))
Повече в лекцията за Работа с Буфери...Повече в лекцията за Работа с Буфери...
5/43OpenGL - Изграждане на Геометрични обекти
glFlush glFlush и и glFinishglFinish
void glFlush(void)void glFlush(void)void glFinish(void)void glFinish(void)
voidvoid glutSwapBuffers( glutSwapBuffers(voidvoid))
6/43OpenGL - Изграждане на Геометрични обекти
glFlushglFlush
glClearColor(0,0,0,0);glClearColor(0,0,0,0);glClear(GL_COLOR_BUFFER_BIT);glClear(GL_COLOR_BUFFER_BIT);……glFlush();glFlush();
Клиент
Сървър
изпраща командите
7/43OpenGL - Изграждане на Геометрични обекти
glFinishglFinish
glClearColor(0,0,0,0);glClearColor(0,0,0,0);glClear(GL_COLOR_BUFFER_BIT);glClear(GL_COLOR_BUFFER_BIT);……glFinish();glFinish();
Клиент
Сървър
изпраща командите
чака да се изпълнят
8/43OpenGL - Изграждане на Геометрични обекти
Буфер2(Back)
glutSwapBuffersglutSwapBuffers
glClearColor(0,0,0,0);glClearColor(0,0,0,0);glClear(GL_COLOR_BUFFER_BIT);glClear(GL_COLOR_BUFFER_BIT);……glutSwapBuffers();glutSwapBuffers(); //извършва и //извършва и FlushFlush
Буфер1(Front)
Буфер1(Back)
Буфер2(Front)
Виждаме
Рисуваме в
9/43OpenGL - Изграждане на Геометрични обекти
glVertexglVertex
Основна команда за дефиниране наОсновна команда за дефиниране нагеометрията на сценатагеометрията на сцената
void glVertex...(x, y, z, w)void glVertex...(x, y, z, w)
10/43OpenGL - Изграждане на Геометрични обекти
““Рисуване”Рисуване”
void glBegin(GLenum mode)void glBegin(GLenum mode)void glEnd(void)void glEnd(void)
Пример:Пример:glColor3d(1,0,0);glColor3d(1,0,0);glBeginglBegin(GL_TRIANGLES);(GL_TRIANGLES); glVertex2d(-1.0, -1.0);glVertex2d(-1.0, -1.0); glVertex2d(1.0, -1.0);glVertex2d(1.0, -1.0); glVertex2d(0.0, 1.0);glVertex2d(0.0, 1.0);glEnd();glEnd();
11/43OpenGL - Изграждане на Геометрични обекти
Пример 1Пример 1
12/43OpenGL - Изграждане на Геометрични обекти
glBeginglBegin режими режими
GL_POINTSGL_POINTS ТочкиТочкиGL_LINESGL_LINES ОтсечкиОтсечкиGL_LINE_STRIPGL_LINE_STRIP Начупена линияНачупена линияGL_LINE_LOOPGL_LINE_LOOP Затворена начупена линияЗатворена начупена линияGL_TRIANGLESGL_TRIANGLES ТриъгълнициТриъгълнициGL_TRIANGLE_STRIPGL_TRIANGLE_STRIP Ивица от триъгълнициИвица от триъгълнициGL_TRIANGLE_FANGL_TRIANGLE_FAN Ветрило от триъгълнициВетрило от триъгълнициGL_QUADSGL_QUADS ЧетириъгълнициЧетириъгълнициGL_QUAD_STRIPGL_QUAD_STRIP Ивица от четириъгълнициИвица от четириъгълнициGL_POLYGONGL_POLYGON МногоъгълникМногоъгълник
13/43OpenGL - Изграждане на Геометрични обекти
GL_POINTSGL_POINTS
V0
V1 V2
V3
V4
14/43OpenGL - Изграждане на Геометрични обекти
GL_LINESGL_LINES
V0
V1 V2
V3
V4
V5
Забележка: Точките не се визуализират
15/43OpenGL - Изграждане на Геометрични обекти
GL_LINE_STRIPGL_LINE_STRIP
V0
V1 V2
V3
V4
V5
Забележка: Точките не се визуализират
16/43OpenGL - Изграждане на Геометрични обекти
GL_LINE_LOOPGL_LINE_LOOP
V0
V1 V2
V3
V4
V5
Забележка: Точките не се визуализират
17/43OpenGL - Изграждане на Геометрични обекти
GL_TRIANGLESGL_TRIANGLES
V0
V1 V2
V4
V5
V3
Забележка: Точките и линиите не се визуализират
18/43OpenGL - Изграждане на Геометрични обекти
GL_TRIANGLE_STRIPGL_TRIANGLE_STRIP
V0
V1 V3
V2
V4
V5
V6
V7
Забележка: Точките и линиите не се визуализират
19/43OpenGL - Изграждане на Геометрични обекти
GL_TRIANGLE_FANGL_TRIANGLE_FAN
V0
V1 V2
V5
V4
V3
Забележка: Точките и линиите не се визуализират
20/43OpenGL - Изграждане на Геометрични обекти
GL_QUADSGL_QUADS
V0
V1 V2
V3
V4
V5 V6
V7
Забележка: Точките и линиите не се визуализират
21/43OpenGL - Изграждане на Геометрични обекти
GL_QUAD_STRIPGL_QUAD_STRIP
V0
V1 V3
V2
V4
V5
V6
V7
Забележка: Точките и линиите не се визуализират
22/43OpenGL - Изграждане на Геометрични обекти
GL_POLYGONGL_POLYGON
V0
V1 V2
V4
V3
Забележка: Точките и линиите не се визуализират
23/43OpenGL - Изграждане на Геометрични обекти
Характеристики на ВръхХарактеристики на Връх
glBegin(GL_TRIANGLES);glBegin(GL_TRIANGLES); glColor3d(1,0,0);glColor3d(1,0,0); glVertex2d(-1.0, -1.0);glVertex2d(-1.0, -1.0); glColor3d(0,1,0);glColor3d(0,1,0); glVertex2d(1.0, -1.0);glVertex2d(1.0, -1.0); glColor3d(0,0,1);glColor3d(0,0,1); glVertex2d(0.0, 1.0);glVertex2d(0.0, 1.0);glEnd();glEnd();
24/43OpenGL - Изграждане на Геометрични обекти
Пример 2Пример 2
25/43OpenGL - Изграждане на Геометрични обекти
Характеристики на връхХарактеристики на връх
void glColor...(red, green, blue, a)void glColor...(red, green, blue, a)void glIndex...(cvoid glIndex...(color_indexolor_index))void glNormal3...(nx, ny, nz)void glNormal3...(nx, ny, nz)
... и много други, които няма да разглеждаме сега.... и много други, които няма да разглеждаме сега.
26/43OpenGL - Изграждане на Геометрични обекти
ТочкиТочки
void glPointSize(GLfloat size)void glPointSize(GLfloat size)
glGetFloatv(GL_POINT_SIZE, &s);glGetFloatv(GL_POINT_SIZE, &s);glglGetFloatvGetFloatv(G(GL_POINT_SIZE_RANGE, &sL_POINT_SIZE_RANGE, &s));;glglEnableEnable(G(GL_POINT_SMOOTHL_POINT_SMOOTH));;glglDisableDisable(G(GL_POINT_SMOOTHL_POINT_SMOOTH));;
27/43OpenGL - Изграждане на Геометрични обекти
ПримерПример 3 (1/2) 3 (1/2)
gglPointSize(5);lPointSize(5);glBegin(GL_POINTS);glBegin(GL_POINTS); glColor3d(1,0,0);glColor3d(1,0,0); glVertex2d(-1.0, -1.0);glVertex2d(-1.0, -1.0); glColor3d(0,1,0);glColor3d(0,1,0); glVertex2d(1.0, -1.0);glVertex2d(1.0, -1.0); glColor3d(0,0,1);glColor3d(0,0,1); glVertex2d(0.0, 1.0);glVertex2d(0.0, 1.0);glEnd();glEnd();
28/43OpenGL - Изграждане на Геометрични обекти
Пример 3 (2Пример 3 (2/2/2))
29/43OpenGL - Изграждане на Геометрични обекти
ЛинииЛинии
void glLineWidth(GLfloat width)void glLineWidth(GLfloat width)void glLineStipple(GLint factor,void glLineStipple(GLint factor,GLushort pattern)GLushort pattern)
glGetFloatv(GL_glGetFloatv(GL_LINELINE__WIDTHWIDTH, &, &ww););glglGetFloatvGetFloatv(G(GL_LINE_WIDTH_RANGE, &wL_LINE_WIDTH_RANGE, &w));;glglEnableEnable(GL_(GL_LINELINE__STIPPLESTIPPLE););glglEnableEnable(G(GL_LINE_SMOOTHL_LINE_SMOOTH));;glglDisableDisable(G(GL_LINE_SMOOTHL_LINE_SMOOTH));;
30/43OpenGL - Изграждане на Геометрични обекти
ПримерПример 4 (1/2) 4 (1/2)
glShadeModel(GL_FLAT);glShadeModel(GL_FLAT);glLineWidth(5);glLineWidth(5);glBegin(GL_LINE_STRIP);glBegin(GL_LINE_STRIP); glColor3d(1,0,0);glColor3d(1,0,0); glVertex2d(-1.0, -1.0);glVertex2d(-1.0, -1.0); glColor3d(0,1,0);glColor3d(0,1,0); glVertex2d(1.0, -1.0);glVertex2d(1.0, -1.0); glColor3d(0,0,1);glColor3d(0,0,1); glVertex2d(0.0, 1.0);glVertex2d(0.0, 1.0); glColor3d(1,1,1);glColor3d(1,1,1); glVertex2d(1.5, 1.5);glVertex2d(1.5, 1.5);glEnd();glEnd();
31/43OpenGL - Изграждане на Геометрични обекти
Пример 4 (2Пример 4 (2/2/2))
glShadeModel(GL_FLAT)glShadeModel(GL_SMOOTH)
32/43OpenGL - Изграждане на Геометрични обекти
ПримерПример 5 (1/2) 5 (1/2)
glEnable(GL_LINE_STIPPLE);glEnable(GL_LINE_STIPPLE);glLineStipple(1, 0xFF00);glLineStipple(1, 0xFF00);glLineWidth(5);glLineWidth(5);glBegin(GL_LINE_STRIP);glBegin(GL_LINE_STRIP); glColor3d(1,0,0);glColor3d(1,0,0); glVertex2d(-1.0, -1.0);glVertex2d(-1.0, -1.0); glColor3d(0,1,0);glColor3d(0,1,0); glVertex2d(1.0, -1.0);glVertex2d(1.0, -1.0); glColor3d(0,0,1);glColor3d(0,0,1); glVertex2d(0.0, 1.0);glVertex2d(0.0, 1.0); glColor3d(1,1,1);glColor3d(1,1,1); glVertex2d(1.5, 1.5);glVertex2d(1.5, 1.5);glEnd();glEnd();
33/43OpenGL - Изграждане на Геометрични обекти
Пример 5 (2Пример 5 (2/2/2))
34/43OpenGL - Изграждане на Геометрични обекти
МногоъгълнициМногоъгълници
void glPolygonMode(GLenum face, GLenum mode)void glPolygonMode(GLenum face, GLenum mode)
face:face:GL_FRONTGL_FRONT само за предна странасамо за предна странаGL_BACKGL_BACK само за задна странасамо за задна странаGL_FRONT_AND_BACKGL_FRONT_AND_BACK и за двете странии за двете страни
mode:mode:GL_POINTGL_POINT само върховесамо върховеGL_LINEGL_LINE само ребрасамо ребраGL_FILLGL_FILL запълнензапълнен
35/43OpenGL - Изграждане на Геометрични обекти
ПримерПример 6 (1/2) 6 (1/2)
glPointSize(5);glPointSize(5);glLineWidth(5);glLineWidth(5);glPolygonMode(GL_FRONT_AND_BACK, GL_POINT);glPolygonMode(GL_FRONT_AND_BACK, GL_POINT);//glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);//glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);//glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);//glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);glBegin(GL_TRIANGLES);glBegin(GL_TRIANGLES); glColor3d(1,0,0);glColor3d(1,0,0); glVertex2d(-1.0, -1.0);glVertex2d(-1.0, -1.0); glColor3d(0,1,0);glColor3d(0,1,0); glVertex2d(1.0, -1.0);glVertex2d(1.0, -1.0); glColor3d(0,0,1);glColor3d(0,0,1); glVertex2d(0.0, 1.0);glVertex2d(0.0, 1.0);glEnd();glEnd();
36/43OpenGL - Изграждане на Геометрични обекти
Пример 6 (2Пример 6 (2/2/2))
37/43OpenGL - Изграждане на Геометрични обекти
Щриховка на многоъгълнициЩриховка на многоъгълници
void glPolygonStipple(const GLubyte *mask)void glPolygonStipple(const GLubyte *mask)
void glGetPolygonStipple(GLubyte *mask)void glGetPolygonStipple(GLubyte *mask)
void glPolygonOffset(GLfloat factor,void glPolygonOffset(GLfloat factor,GLfloat units)GLfloat units)
38/43OpenGL - Изграждане на Геометрични обекти
Предна страна на многоъгълникПредна страна на многоъгълник
void glFrontFace(GLenum mode)void glFrontFace(GLenum mode)
mode:mode:
GL_CCWGL_CCW обратно на часоватаобратно на часовата
GL_CWGL_CW по часоватапо часовата
приGL_CCW
лице гръб
39/43OpenGL - Изграждане на Геометрични обекти
гръб
Бракуване на многоъгълнициБракуване на многоъгълници
glEnable(GL_CULL_FACE);glEnable(GL_CULL_FACE);
void glCullFace(GLenum mode)void glCullFace(GLenum mode)
mode:mode:
GL_FRONTGL_FRONT
GL_BACKGL_BACK
GL_FRONT_AND_BACKGL_FRONT_AND_BACK
лице
при GL_BACKзадните стени не се растеризират
GL_CCW
40/43OpenGL - Изграждане на Геометрични обекти
ПримерПример 7 (1/2) 7 (1/2)
glPolygonMode(GL_FRONT, GL_FILL);glPolygonMode(GL_FRONT, GL_FILL);glPolygonMode(GL_BACK, GL_LINE);glPolygonMode(GL_BACK, GL_LINE);glEnable(GL_CULL_FACE);glEnable(GL_CULL_FACE);glFrontFace(GL_CCW); // GL_CWglFrontFace(GL_CCW); // GL_CWglCullFace(GL_FRONT); //GL_BACKglCullFace(GL_FRONT); //GL_BACK
glColor3d(1,0,0);glColor3d(1,0,0);glutSolidSphere(1, 32, 32);glutSolidSphere(1, 32, 32);
41/43OpenGL - Изграждане на Геометрични обекти
Пример 7Пример 7 (2/2) (2/2)
glCullFace(GL_FRONT)glCullFace(GL_BACK)
42/43OpenGL - Изграждане на Геометрични обекти
Скриване на ребраСкриване на ребра
void glEdgeFlag...(GLboolean flag)void glEdgeFlag...(GLboolean flag)
GL_TRUEGL_TRUE реброто се показвареброто се показва
GL_FALSEGL_FALSE реброто не се показвареброто не се показва
43/43OpenGL - Изграждане на Геометрични обекти
OpenGLOpenGL Изграждане на Изграждане наГеометрични обектиГеометрични обекти
Въпроси?Въпроси?