- •1) Основные этапы развития компьютерной графики. Основные направления развития компьютерной графики.
- •А) Изобразительная компьютерная графика
- •Б) Обработка и анализ изображений
- •В) Анализ сцен
- •Г) Когнитивная компьютерная графика
- •2) Приложения компьютерной графики. Виды представления компьютерной графики
- •3) Виды графического представления геометрических моделей. Цвет. Система rgb, cmyk. Цветовые модели
- •6) Перенос и повороты в трехмерном пространстве
- •7) Основные принципы программирования Windows -приложения.
- •8) Разработка каркаса Windows –приложения.
- •15) Основная концепция решения задач загораживания
- •16) Известные методы решения задач загораживания
- •24) Кривые Безье.
- •Применение в компьютерной графике
- •25) Простая модель освещения.
- •27) Закраска методом Гуро.
- •28) Закраска Фонга.
3) Виды графического представления геометрических моделей. Цвет. Система rgb, cmyk. Цветовые модели
Назначение цветовой модели - дать средства описания цвета в пределах некоторого цветового охвата, в том числе и для выполнения интерполяции цветов. Наиболее часто в компьютерной графике используются модели RGB, CMY, YIQ, HSV и HLS.
RGB(Red, Green, Blue - красный, зеленый, синий) - аппаратно-ориентированная модель, используемая в дисплеях для аддитивного формирования оттенков самосветящихся объектов (пикселов экрана). Система координат RGB - куб с началом отсчета (0,0,0), соответствующим черному цвету (см. рис.0.4.1). Максимальное значение RGB - (1,1,1) соответствует белому цвету.
Рис. 0.4.1: Цветовой куб модели RGB
CMY(Cyan, Magenta, Yellow - голубой, пурпурный, желтый) - аппаратно-ориентированная модель, используемая в полиграфии для субтрактивного формирования оттенков, основанного на вычитании слоем краски части падающего светового потока. Цвета модели CMY являются дополнительными к цветам модели RGB, т.е. дополняющими их до белого. Таким образом система координат CMY - тот же куб, что и для RGB, но с началом отсчета в точке с RGB координатами (1,1,1), соответствующей белому цвету. Цветовой куб модели CMY показан на рис.0.4.2.
Рис. 0.4.2: Цветовой куб модели CMY
Преобразования между пространствами RGB и CMY определяются следующим образом:
[RGB]=[111]-[СМУ] |
Причем единичный вектор-строка в модели RGB - представление белого цвета, а в модели CMY - черного.
4) Двумерные преобразования и новые координаты
5) Однородные координаты
Проективная геометрия - раздел геометрии, изучающий свойства фигур, не меняющихся при проективных преобразованиях.
Проекция - отображение множества точек в n+1-мерном пространстве в одну точку n - мерном пространстве.
Однородные координаты ― координаты, обладающие тем свойством, что определяемый ими объект не меняется при умножении всех координат на одно и то же ненулевое число. Они возникли из - за необходимости преобразования из n - мерного пространства в n+1 мерное.
6) Перенос и повороты в трехмерном пространстве
7) Основные принципы программирования Windows -приложения.
В MS-DOS монопольно владеет всеми ресурсами системы и является инициаторм взаимодействия с ОС( операционной системы).
Windows – многозадачная ОС, которая явл. инициатором обращения к программе
Ресурсы Windows явл. разделяемыми и программа явл. лишь приложением и не может владеть ими монопольно.
Приложение ожидает посылки сообщения ОС, лишь после его получения выполняет определенные действия, затем переходит в режим ожидания очередного сообщения.
8) Разработка каркаса Windows –приложения.
Чтобы иметь возможность работать с оконным интерфейсом, заготовка или каркас windows приложения должна выполнить которое стандартные действия:
1) определить класс окна;
2)зарегестрировать окно;
3) создать окно данного класса;
4) отобразить окно;
5) запустить цикл обработки сообщения.
Определитель класса окна.
WinMain( );
HWND hWnd;// дискриптор главного окна( описание);
Дискриптор – описатель, используемый для описания объектов ОС. Дискриптор позволяет отслеживать состояние объекта в памяти, при его перемещении по инициативе ОС.
Тип дискриптора – 32 разрядное целое числовое.
HWND– предназначен для хранения дискриптора главного окна программы.
MSG msg; (MSG – это структура в которой храниться информация по сообщение передаваемой ОС в окно приложения)
Наша программа начинает выполняться с функции WinMain(). Это и есть главная функция. Функция WinMain() выполняет, обычно, следующие задачи:
Определяет класс окна.
Регистрирует данный класс в системе.
Создает главное окно приложения и другие элементы управления.
Отображает окно на экране.
Запускает цикл обработки сообщений.
Объявляется она вот каким образом:
#include <windows.h>
#include <tchar.h>
LRESULT CALLBACK WndProc(HWND,UINT, WPARAM, LPARAM);
TCHAR WinName[]=_T("MainFrame");
//-----------------------------------------------------------
int APIENTRY _tWinMain(HINSTANCE This, HINSTANCE Prev, LPSTR cmd, int mode)
{
HWND hWnd;
MSG msg;
WNDCLASS wc;
//OPRED CLASSA OKNA
wc.hInstance = This;
wc.lpszClassName = WinName; // имя класса окна
wc.lpfnWndProc = WndProc; // функция окна
wc.style= CS_HREDRAW | CS_VREDRAW; // стиль окна
wc.hIcon = LoadIcon (NULL,IDI_APPLICATION); //СТАНДАРТНАЯ ИКОНКА
wc.hCursor= LoadCursor (NULL, IDC_ARROW); //СТАНДАРТНЫЙ КУРСОР
wc.lpszMenuName = NULL; //нет меню
wc.cbClsExtra = 0 ; // нет дополнительных данных класса
wc.cbWndExtra = 0 ; //нет дополнительных данных окна
//заполнение окна белым цветом
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
if (!RegisterClass(&wc))return 0; //регистрация класса окна
//создание окна
hWnd= CreateWindow (WinName, //имя класса окна
_T("Каркас Windows - приложения"), //заоголовок окна
WS_OVERLAPPEDWINDOW, //СТИЛЬ ОКНА
CW_USEDEFAULT, //X
CW_USEDEFAULT, //Y
CW_USEDEFAULT, //WIDTH
CW_USEDEFAULT, // Heigth
HWND_DESKTOP,
NULL,
This,
NULL);
ShowWindow (hWnd,mode);
while (GetMessage (&msg,NULL,0,0) )
{TranslateMessage (&msg);
DispatchMessage (&msg);
}
return 0;
}
//---------------------------------------------------
// оконная функция вызываемая операционной системой
// и получает сообщения из очереди для данного приложения
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
// обработчик сообщений
switch (message) { case WM_DESTROY: PostQuitMessage(0);
break;// завершение программы
default: return DefWindowProc (hWnd,message,wParam,lParam)
;
}
return 0;
}
9) Графические средства Windows API.
1. Вывод точки. SetPixel устанавливает заданный цвет в точке с указанными координатами:
COLORREF SetPixel(HDC hDC, int x, int y, COLORREF crColor);
Пример:
SetPixel(hDC, 10,10, RGB(0,0,0));
Функция GetPixel соответственно возвращает цвет в заданных координатах.
COLORREF Getpixel(hDC, int x, int y);
2. Рисование линий.
BOOL LineTo(hDC, int x, int y);
Функция рисует линию от текущей позиции до места, указанного в аргументах. Чтобы изменить тип линии (толщину, стиль)- меняется тип пера. Но об этом позже.
Так как в отличие от многих других подходов, в GDI нет функции рисования линии от одного указанного места до другого, её можно создать самому. Она будет соединять линией точки с координатами: x1,y1 и x2,y2.
BOOL Line(HDC hdc, int x1, int y1, int x2, int y2)
{
MoveToEx(hdc, x1, y1, NULL); //сделать текущими координаты x1, y1
return LineTo(hdc, x2, y2);
}
3. Дуга
BOOL Arc(hDC, int left, int top, int right, int bottom, int x1, int y1, int x2, int y2);
Первые четыре аргумента - левый верхний и правый нижний углы прямоугольника, в который вписан эллипс. Остальные значения - координаты точек, от которых будут проведены прямые к центру эллипса. В местах пересечения первой и второй прямой с радиусом эллипса, начинается и кончается дуга.
4. Прямоугольник. По умолчанию прозрачный, а вообще, тип его заливки определяется текущей кистью. По умолчанию она тоже прозрачная.
BOOL Rectangle(hDC, int left, int top, int right, int bottom); //аргументы - это коордианты левого верхнего и правого нижнего углов
5. Закруглённый прямоугольник. Его можно использовать, как импровизированную кнопку, если не лень возиться.
BOOL RoundRect(hDC, int left, int top, int right, int bottom, int width, int height);
Первые пять параметров совпадают с параметрами предыдущей фукнции. Далее width и height задают ширину и высоту эллипса, дуги которого ограничивают прямоугольник.
6. Кисти. Самое время познакомиться с кистями, так как фигуры, которые пойдут дальше выглядят лучше закрашенными. Мы уже немного затронули эту тему во вводной части. Теперь рассмотрим как задать свой стиль кисти. Как и setfillstyle() в DOS, кисть закрашивает какую-то область в какой-то цвет. В зависимости от кисти, она может делать это в полосочку, в клеточку, по диагонали...
Есть два способа объявить кисть. Первый - задать сплошную заливку, второй - указать стиль. Для этого существуют соответственно функции: CreateSoldBrush() и CreateHatchBrush().
HBRUSH hBrush; //создаём объект-кисть
CreateSolidBrush(RGB(255,0,67)); //задаём сплошную кисть, закрашенную цветом RGB
SelectObject(hdc, hBrush); //делаем кисть активной
9. Эллипс
BOOL Ellipse(HDC hdc, int x1, int y1, int x2, int y2);
координаты - это прямоугольник, в который вписывается эллипс
12. Многоугольник. Есть много функций рисования мноугольников. Мы рассмотрим две. Рисования от вершины к вершине и рисования отрезками:
PolyDraw оперирует вершинами:
POINT poly[8];
BYTE polytype[8];
poly[0].x=375; //координаты первой вершины
poly[0].y=375;
....//и так заполняем координаты всех восьми вершин
poly[7].x=400; //координаты восьмой вершины
poly[7].y =400;
polytype[0]=PT_LINETO;
... //другой массив содержит режим рисования
polytype[7]=PT_LINETO;
PolyDraw(hdc, poly, polytype, 8); //рисование многоугольника