Компьютерная графика Visual C++ & OpenGL
1. Знакомство
1. Знакомство
2. Основные типы данных OpenGL
2. Основные типы данных OpenGL
3. Рисование геометрических объектов. Буферы и цвет.
3. Рисование геометрических объектов. Буферы и цвет.
3. Рисование геометрических объектов. Буферы и цвет.
3. Рисование геометрических объектов. Графические примитивы.
3. Рисование геометрических объектов. Графические примитивы.
3. Рисование геометрических объектов. Графические примитивы.
3. Рисование геометрических объектов. Точки, линии, многоугольники.
3. Рисование геометрических объектов. Точки, линии, многоугольники.
3. Рисование геометрических объектов. Точки, линии, многоугольники.
3. Рисование геометрических объектов. Трехмерные фигуры (функции).
4. Преобразование объектов в пространстве 5. Получение проекций 6. Задание моделей закрашивания 7. Освещение 8. Полупрозначность 9. Наложение
10. Практическая часть
10. Практическая часть
10. Практическая часть
10. Практическая часть
10. Практическая часть
10. Практическая часть
10. Практическая часть
10. Практическая часть
10. Практическая часть
10. Практическая часть
10. Практическая часть
10. Практическая часть
10. Практическая часть
2.00M
Category: programmingprogramming

Компьютерная графика Visual C++ & OpenGL. Визуализация результатов численных расчетов

1. Компьютерная графика Visual C++ & OpenGL

Компьютерная графика
Visual C++ & OpenGL
Визуализация результатов численных расчетов

2. 1. Знакомство

• Open Graphics Library - стандартная
библиотека для 32-разрядных ОС
• 3D-графика + рендерниг
• opengl32.dll, glu32.dll
Визуализация результатов численных расчетов
2

3. 1. Знакомство

Геометрические
и растровые
примитивы
Буфер
аккумулятора
В-сплайны
Градиентная
заливка
Пространственные
преобразования
Визуализация результатов численных расчетов
Альфа-канал
Двойная
буферизация
Текстуры
Сглаживание
цвета
Заливка
и освещенность
фактур
Атмосферные
эффекты
3

4. 2. Основные типы данных OpenGL

• Команды OpenGL начинаются с префикса gl, константы – с префикса GL_.
Суффикс
Описание
Тип в С
Тип в OpenGL
b
8-битовое целое
char
GLbyte
s
16-битовое целое
short
GLshort
i
32-битовое целое
long
GLint GLsizei
f
32-битовое вещественное число
float
GLfloat, GLclampf
d
64-битовое вещественное число
double
GLdouble, GLclampd
ub
8-битовое беззнаковое целое
unsigned char
GLubyte, GLboolean
us
16-битовое беззнаковое целое
unsigned short
GLushort
ui
32-битовое беззнаковое целое
unsigned long
GLuint, GLenum, GLbitfield
Визуализация результатов численных расчетов
4

5. 2. Основные типы данных OpenGL

• Многие команды имеют как векторные, так и не векторные версии.
glColor3f(1.0, 1.0, 1.0);
=
GLfloat color[] = {1.0, 1.0, 1.0};
glColor3fv(color);
• Функции для определения значений переменных:
glGetBooleanv(), glGetDoublev(), glGetFloatv(), glGetIntegerv()
Визуализация результатов численных расчетов
5

6. 3. Рисование геометрических объектов. Буферы и цвет.


Фрейм буфер, z-буфер, буфер трафарета, аккумулирующий буфер.
glClear(Glbitfieldmask):
GL_COLOR_BUFFER_BIT – очистить буфер изображения (фреймбуфер);
GL_DEPTH_BUFFER_BIT – очистить z-буфер;
GL_ACCUM_BUFFER_BIT – очистить аккумулирующий буфер;
GL_STENCIL_BUFFER_BIT – очистить буфер трафарета.
Визуализация результатов численных расчетов
6

7. 3. Рисование геометрических объектов. Буферы и цвет.

• glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) цвет, которым очищается буфер изображения
glClearDepth(GLfloatdepth) - значение, записываемое в z-буфер
glClearStencil(GLint s) - значение, записываемое в буфер трафарета
glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) цвет, записываемый в аккумулирующий буфер
Визуализация результатов численных расчетов
7

8. 3. Рисование геометрических объектов. Буферы и цвет.

• glColor{3 4}{b s i f d ub us ui}[v](TYPE red, …) – задание цвета объекта
• glFlush() - немедленное рисование ранее переданных команд
• glFinish() - ожидание завершения всех ранее переданных команд
• glEnable(GL_DEPTH_TEST) – удаление невидимых поверхностей
методом z-буфера
Визуализация результатов численных расчетов
8

9. 3. Рисование геометрических объектов. Графические примитивы.


OpenGL работает с однородными координатами (x, y, z, w)
Линия - отрезок, заданный своими начальной и конечной вершинами; грань - замкнутый
выпуклый многоугольник
с несамопересекающейся границей
Все геометрические объекты задаются посредством вершин, которые задаются процедурой:
glVertex{2 3 4}{s i f d}[v](TYPE x, …)
Пример:
glVertex2s(1, 2);
glVertex3f(2.3, 1.5, 0.2);
GLdouble vect[] = {1.0, 2.0, 3.0, 4.0};
glVertex4dv(vect);
Визуализация результатов численных расчетов
9

10. 3. Рисование геометрических объектов. Графические примитивы.


glBegin(), glEnd()
GL_POINTS – набор отдельных точек;
GL_LINES – пары вершин, задающих отдельные точки;
GL_LINE_STRIP – незамкнутая ломаная;
GL_LINE_LOOP – замкнутая ломаная;
GL_POLYGON – простой выпуклый многоугольник;
GL_TRIANGLES – тройки вершин, интерпретируемые как вершины отдельных
треугольников;
GL_TRIANGLE_STRIP – связанная полоса треугольников;
GL_TRIANGLE_FAN – веер треугольников;
GL_QUADS – четвёрки вершин, задающие выпуклые четырёхугольники;
GL_QUAD_STRIP – полоса четырёхугольников.
Визуализация результатов численных расчетов
10

11. 3. Рисование геометрических объектов. Графические примитивы.


Встречаются команды задания различных атрибутов вершин glVertex(), glColor(), glNormal(),
glCallList(), glCallLists(), glTexCoord(), glEdgeFlag(), glMaterial()
Пример – задание окружности:
glBegin(GL_LINE_LOOP);
for (int i = 0; I < N; i++)
{
float angle = 2 * M_PI * i / N;
glVertex2f(cos(angle), sin(angle));
}
glEnd();
Визуализация результатов численных расчетов
11

12. 3. Рисование геометрических объектов. Точки, линии, многоугольники.

• Размеры точки - glPointSize(GLfloat size)
• Задание ширины линии в пикселях - gflineWidth(GLfloatwidth)
• Шаблон для линии - glLineStipple(Glint factor, GLushort pattern)
Шаблон задается переменной pattern и растягивается в factor раз.
• Использование шаблонов линии - glEnable(GL_UNE_STIPPLE),
запрет - glDisable(GL_LINE_ST1PPLE)
Визуализация результатов численных расчетов
12

13. 3. Рисование геометрических объектов. Точки, линии, многоугольники.


Передняя и задняя стороны многоугольника –
glPolygonMode(GLenum face, GLenum mode)
Значения параметра face:
GL_FRONT_AND_BACK (обе стороны)
GL_FRONT (лицевая сторона)
GL_BACK (нелицевая сторона)
Значения параметра mode
GL_POINT (многоугольник – набор граничных точек)
GL_LINE (многоугольник – граничная ломаная линия)
GL_FILL (многоугольник – заполненная область)
Визуализация результатов численных расчетов
13

14. 3. Рисование геометрических объектов. Точки, линии, многоугольники.

• Пример: параллелепипед с ребрами, параллельными
координатным осям, по диапазонам изменения х, у и z
#include <windows.h>
#include <gl\gl.h>
glVertex3f ( x1, y2, z2 );
glEnd ();
glBegin ( GL_POLYGON );
drawBox(GLfloat x1, GLfloat glNormal3f ( 0.0, 0.0, -1.0 );
x2, GLfloat y1, GLfloat y2,
glVertex3f ( x2, y1, z1 );
GLfloat z1, GLfloatz2)
glVertex3f ( x1, y1, z1 );
glVertex3f ( x1, y2, z1 );
{
glVertex3f ( x2, y2, z1 );
glBegin ( GL_POLYGON );
glEnd ();
glNormal3f ( 0.0, 0.0, 1.0 );
glBegin ( GL_POLYGON );
glVertex3f ( x1, y1, z2 );
glNormal3f ( -1.0, 0.0, 0.0 );
glVertex3f ( x2, y1, z2 );
glVertex3f ( x1, y1, z1 );
glVertex3f ( x2, y2, z2 );
glVertex3f ( x1, y1, z2 );
Визуализация результатов численных расчетов
glVertex3f ( x1, y2, z2 );
glVertex3f ( x1, y2, z1 );
glEnd ();
glBegin ( GL_POLYGON );
glNormal3f ( 1.0, 0.0, 0.0 );
glVertex3f ( x2, y1, z2 );
glVertex3f ( x2, y1, z1 );
glVertex3f ( x2, y2, z1 );
glVertex3f ( x2, y2, z2 );
glEnd ();
glBegin ( GL_POLYGON );
glNormal3f ( 0.0, 1.0, 0.0 );
glVertex3f ( x1, y2, z2 );
glVertex3f ( x2, y2, z2 );
glVertex3f ( x2, y2, z1 );
glVertex3f ( x1, y2, z1 );
glEnd ();
glBegin ( GL_POLYGON );
glNormal3f ( 0.0, -1.0, 0.0 );
glVertex3f ( x2, y1, z2 );
glVertex3f ( x1, y1, z2 );
glVertex3f ( x1, y1, z1 );
glVertex3f ( x2, y1, z1 );
glEnd ();
}
14

15. 3. Рисование геометрических объектов. Трехмерные фигуры (функции).

auxSolidSphere(R) // сфера
auxSolidIcosahedron(width) // многогранники
auxSolidCube(width) // куб
auxSolidOctahedron(width)
auxSolidBox(width, height, depth) // коробка
auxSolidTetrahedron(width)
auxSolidTorus(r,R) // тор
auxSolidDodecahedron(width)
auxSolidCylinder(r,height) // цилиндр
auxSolidTeapot(width) // рисует чайник
auxSolidCone(r,height) // конус
Для построения каркасных фигур вместо Solid необходимо использовать Wire.
Пример: auxWireCube(1) // рисует каркасную модель куба.
Визуализация результатов численных расчетов
15

16. 4. Преобразование объектов в пространстве 5. Получение проекций 6. Задание моделей закрашивания 7. Освещение 8. Полупрозначность 9. Наложение

4. Преобразование объектов
в пространстве
5. Получение проекций
6. Задание моделей закрашивания
7. Освещение
8. Полупрозначность
9. Наложение текстуры
Визуализация результатов численных расчетов
16

17. 10. Практическая часть

Визуализация результатов численных расчетов
17

18. 10. Практическая часть

Визуализация результатов численных расчетов
18

19. 10. Практическая часть

Визуализация результатов численных расчетов
19

20. 10. Практическая часть

Визуализация результатов численных расчетов
20

21. 10. Практическая часть

Визуализация результатов численных расчетов
21

22. 10. Практическая часть

Визуализация результатов численных расчетов
22

23. 10. Практическая часть

Визуализация результатов численных расчетов
23

24. 10. Практическая часть

Визуализация результатов численных расчетов
24

25. 10. Практическая часть

Визуализация результатов численных расчетов
25

26. 10. Практическая часть

Визуализация результатов численных расчетов
26

27. 10. Практическая часть

Визуализация результатов численных расчетов
27

28. 10. Практическая часть

Визуализация результатов численных расчетов
28

29. 10. Практическая часть

Работаем!
Визуализация результатов численных расчетов
29
English     Русский Rules