Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2633

.pdf
Скачиваний:
6
Добавлен:
07.01.2021
Размер:
54.26 Mб
Скачать

active=FALSE;

Программа теперь не активна

}

return 0;

Возвращаемся в цикл обработки сообщений

}

case WM_SYSCOMMAND:

Перехватываем системную команду

{

switch (wParam)

Останавливаем системный вызов

{

case SC_SCREENSAVE:

Пытается ли запустится скринсейвер?

case SC_MONITORPOWER:

Пытается ли монитор перейти в режим сбережения энергии? return 0;

Предотвращаем это

}

break;

Выход

}

case WM_CLOSE:

Получили сообщение о закрытие?

{

PostQuitMessage(0);

Отправить сообщение о выходе

return 0;

Вернуться назад

}

case WM_KEYDOWN: Была ли нажата кнопка?

{

keys[wParam] = TRUE;

Если так, мы присваиваем этой ячейке true return 0;

Возвращаемся

}

case WM_KEYUP:

Была ли отпущена клавиша?

{

keys[wParam] = FALSE;

Если так, мы присваиваем этой ячейке false

183

return 0;

Возвращаемся

}

case WM_SIZE:

Изменены размеры OpenGL окна

{

ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));

Младшее слово=Width, старшее слово=Height return 0;

Возвращаемся

}

}

Пересылаем все необработанные сообщения DefWindowProc return DefWindowProc(hWnd,uMsg,wParam,lParam);

}

int WINAPI

WinMain(

HINSTANCEhInstance,

Дескриптор

приложения

 

HINSTANCEhPrevInstance,

Дескриптор родительского приложения

LPSTR lpCmdLine,

Параметрыкоманднойстроки

int nCmdShow)

Состояние отображения окна

{

MSG msg;

Структура для хранения сообщения Windows BOOL done=FALSE;

Логическая переменная для выхода из цикла Спрашивает пользователя, какой режим экрана он предпочитает

if (MessageBox(NULL,"Запустить во весь экран?", "Старт!!!",MB_YESNO|MB_ICONQUESTION)==IDNO)

{

fullscreen=FALSE;

Оконный режим

}

Создать наше OpenGL окно

if (!CreateGLWindow("Ваза",640,480,32,fullscreen))

{

return 0;

Выйти, если окно не может быть создано

}

184

while(!done)

Цикл продолжается, пока done не равно true

{

if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))

Есть ли в очереди какое­нибудь сообщение?

{

if (msg.message==WM_QUIT)

Мы поучили сообщение о выходе?

{

done=TRUE; Если так, done=true

}

else

Если нет, обрабатывает сообщения

{

TranslateMessage(&msg);

ереводим сообщение

DispatchMessage(&msg);

Отсылаем сообщение

}

}

else

Если нет сообщений

{

Прорисовываем сцену.

if ((active && !DrawGLScene()) keys[VK_ESCAPE])

Активна ли программа?

Было ли нажата клавиша ESC?

{

done=TRUE;

ESC Говорит об останове выполнения программы

}

else

Не время для выхода, обновим экран.

{

SwapBuffers(hDC);

Меняем буфер (двойная буферизация)

if (keys['L'] && !lp)

{

lp=TRUE;

light=!light; if (!light)

{

glDisable(GL_LIGHTING);

}

else

185

{

glEnable(GL_LIGHTING);

}

}

if (!keys['L'])

{

lp=FALSE;

}

if (keys[VK_PRIOR])

{

z­=0.01f;

}

if (keys[VK_NEXT])

{

z+=0.01f;

}

if (keys[VK_UP])

{

xspeed­=0.01f;

}

if (keys[VK_DOWN])

{

xspeed+=0.01f;

}

if (keys[VK_RIGHT])

{

yspeed+=0.01f;

}

if (keys[VK_LEFT])

{

yspeed­=0.01f;

}

if (keys[VK_F1])

Была ли нажата F1?

{

keys[VK_F1]=FALSE;

Если так, меняем значение ячейки массива на false KillGLWindow();

Разрушаем текущее окно

fullscreen=!fullscreen;

Переключаем режим

Пересоздаём наше OpenGL окно if

(!CreateGLWindow("ВАЗА",640,480,32,fullscreen))

{

186

return 0;

Выходим, если это невозможно

}

}

}

}

}

KillGLWindow();

Разрушаем окно

return (msg.wParam);

Выходим из программы

187

Приложение 2

Методические указания к выполнению курсового проекта

Целью выполнения курсового проекта является самостоятельное закрепления материала через практическое применение полученных теоретических знаний на лекциях и практических навыков – на лабораторных работах.

Так как в дисциплине «Компьютерная графика» рассматривается широкий круг вопросов, курсовой проект содержит, помимо практической части, теоритическую.

Структура и содержание основных разделов курсового проекта должны соответствовать структуре, предложенной в таблице П1.

Темы курсового проекта представлены в табл. П1-П3, и могут изменяться и дополняться.

Таблица П1

Структура курсового проекта

Раздел

Объем

Наименование раздела

курсовой работы

 

 

 

 

Введение

1 с.

 

 

 

 

 

Освещение

теоретических

1

10-15с.

вопросов в соответствии с темой

 

 

(Табл. П2).

 

 

 

 

Программная

реализация

2

10-20с.

графических объектов средствами

OpenGL (в соответствии

с темой

 

 

(Табл. П3)).

 

 

Заключение

1 с.

 

 

 

Список использованных

 

 

 

 

источников

 

 

 

 

Приложение

 

При необходимости

полный

 

листинг программного кода

 

 

Программа и отчет

 

 

 

 

предоставляется на

 

 

 

 

электронном носителе

 

 

 

 

Таблица П2

Темы теоретической части курсового проекта

1.Критерии оценки качества систем отображения информации.

188

2.Модели описания поверхностей: равномерная сетка, неравномерная сетка, изолинии.

3.Модели описания поверхностей: аналитическая модель, векторная полигональная модель, воксельная модель.

4.Модели отражения света: трассировка лучей, метод Гуро, метод Фонга.

Базовые алгоритмы векторной графики: алгоритмы вывода прямой линии, алгоритм вывода окружности, кривая Безье.

5.Базовые растровые алгоритмы: алгоритмы вывода прямой линии, алгоритм вывода окружности, кривая Безье, алгоритмы закрашивания и т.д.

6.Методы построения теней (проективные тени, stencil shadows, shadow maps, perspective shadow map).

7.Требования к СКГ (Технические, эксплуатационные).

8.Продвинутые методики текстурирования (spherical environment mapping, cubic environment mapping, environment bump mapping, emboss bump mapping, per pixel lighting, polynomial texture maps).

9.Отображение двухмерной текстуры на трехмерную поверхность.

10.Текстурные координаты, билинейная, трилинейная и анизотропная фильтрации. Пертурбация нормалей. Трехмерные текстуры.

11.Мировые и экранные координаты. Преобразования координат. Проекции.

12.Эргономические требования к СКГ.

13.Тенденции построения современных графических систем: графическое ядро, приложения, инструментарий для написания приложений.

14.Форматы машинной графики, преобразование форматов, критерии оценки качества, примеры.

15.Стандарты цветного телевидения: NTSC, PAL, SECAM.

16.Телевидение. Уплотнение спектра (гребенчатый фильтр). Искажения, возникающие при передаче телевизионных изображений.

17.Алгоритмы сжатия изображений: JPEG, Wavelet.

18.Алгоритмы сжатия изображений: RLE, LZW.

19.Алгоритмы сжатия последовательностей изображений: MPEG (1,2,4).

20.Перспективы развития и применения компьютерной графики.

21.Алгоритмы удаления невидимых поверхностей. Алгоритм художника, Z буфер. Сортировка для алгоритма художника.

22.Графика в Internet.

23.Иерархические графические модели (модель руки робота). Обход древовидных структур. Граф сцены. Анимация.

189

24.Проективное наложение текстуры в системе OpenGL. Сглаживание погрешностей дискретизации. Смешивание изображений в

OpenGL.

25.Буферы OpenGL. Удаление нелицевых граней. Растровое преобразование с использование Z-буфера. Сортировка по глубине.

26.Законы визуального восприятия: иерархия отношений зрения и слуха, принцип избыточности, принцип группировки, восприятие пространства, восприятие движения и событий.

27.Компьютерная графика в инженерных расчетах (примеры, организация работ, оценка эффективности).

28.Образный анализ данных (когнитивная графика).

29.Фреймы и абстрактные типы данных. Фреймы в OpenGL. Матрицы преобразований в OpenGL. Видовое преобразования в OpenGL. Проективные преобразования в OpenGL (перспективное и параллельное преобразование).

30.Стандартизация в СКГ.

31.Стандарты обмена графическими данными.

32.Новые направления и технологии в компьютерной графике: вейвлеты в компьютерной графике.

33.Поверхности произвольного вида с использованием кривых Безье и B-сплайнов.

34.Новые направления и технологии в компьютерной графике: фрактальная графика.

35.Алгоритмы сжатия видеоинформации.

36.Алгоритмы клиппирования, алгоритм Сазерленда-Коэна, алгоритм Лианга-Барского.

37.Аархитектура графических систем.

38.Высокоскоростные графические системы

39.Односторонние поверхности, отбраковка односторонних поверхностей. Заливка, алгоритм построчного сканирования. Понятия первичного и вторичных буферов.

40.Аппаратное обеспечение компьютерной графики: графический адаптер, видеопамять.

Таблица П3

Темы практической части курсового проекта

1.Применение эффекта тумана средствами OPENGL для создания иллюзии глубины пространства на примере горного ланшафта.

2.Текстурирование куба средствами OPENGL с применением билинейной и трилинейной фильтрации.

3.Текстурирование куба средствами OPENGL одной из продвинутых техник текстурирования.

190

4.Моделирование средствами OPENGL броуновского движения.

5.Средствами OPENGL реализация трехмерного представления статистических данных.

6.Моделирование средствами OPENGL столкновения твердых тел на примере игры в бильярд.

7.Моделирование средствами OPENGL природного феномена: водной поверхности. Анимация параметров источника света и материалов.

8.Моделирование средствами OPENGL столкновения твердых тел на примере мозаики «Детский калейдоскоп».

9.Моделирование средствами OPENGL природного феномена: огня. Анимация параметров источника света и материалов.

10.Моделирование средствами OPENGL природного феномена: облаков. Анимация параметров источника света и материалов.

11.Моделирование средствами OPENGL 3D объекта «АСОИУ». Анимация матриц видового, проективного и модельного преобразования (горизонтальное и вертикальное движение, вращение по трем осям).

12.Моделирование средствами OPENGL 3D объекта «АСОИУ». Анимация матриц видового, проективного и модельного преобразования (изменение цвета букв в зависимости от выбранного источника света).

13.Моделирование средствами OPENGL 3D объекта «АСОИУ». Анимация матриц видового, проективного и модельного преобразования (изменение цвета букв в зависимости от выбранного источника света).

14.Моделирование средствами OPENGL 3D объекта «ОМСК-2012». Анимация матриц видового, проективного и модельного преобразования (изменение цвета букв в зависимости от выбранного источника света).

15.Моделирование средствами OPENGL 3D объектов «пирамида» и «шар» с осуществлением перемещения относительно друг друга.

16.Моделирование средствами OPENGL 3D объекта «АБИТУРИЕНТ 2012» внутри шара. Анимация параметров источника света и материалов. (изменение цвета букв в зависимости от «прозрачности» шара).

17.Моделирование средствами OPENGL 3D объекта «СИБАДИ 2012». Анимация параметров источника света и материалов (изменение текстуры и цвета текстуры букв, использование эффекта теней).

18.Моделирование средствами OPENGL 3D объекта «ГЛОБУС» с осуществлением зеркального и «бликующего» отражения.

19.Моделирование средствами OPENGL 3D объекта «Сосуд с

191

жидкостью» Анимация параметров источника света и материалов (Сосуд должен быть «наполнен» разными жидкостями по цвету и плотности).

20.Моделирование средствами OPENGL 3D объекта «Сосуд с жидкостью» Анимация параметров источника света и материалов (Сосуд должен быть «наполнен» жидкостью с движущимися «пузырьками»).

21.Моделирование средствами OPENGL 3D объекта «Развивающийся флаг СИБАДИ» на фоне здания академии

22.Реализация алгоритмов фрактальной графики средствами OPENG. Моделирование водной поверхности.

23.Реализация алгоритмов фрактальной графики (создание изображения).

24.Реализация алгоритмов фрактальной графики (сжатие изображения).

25.Моделирование средствами OPENGL 3D объекта «Стеклянная ваза с рисунком».

26.Реализация алгоритмов фрактальной графики средствами OPENG. Моделирование текстур (не менее пяти текстур).

27.Моделирование средствами OPENGL 3D объекта «Новогодние шары». Анимация параметров источника света и материалов.

28.Моделирование средствами OpenGL действия: окружность плавно перетекает в ромб, и наоборот, цвет периодически изменяется.

29.Моделирование средствами OpenGL действия: основание конуса плавно перетекает в вершину, и наоборот, цвет периодически изменяется.

30. Моделирование средствами OpenGL действия: «облако» (несколько пересекающихся эллипсоидов) объединяются в один, цвет периодически изменяется.

31.Имитация «воронки» (несколько дисков с разными радиусами, упорядоченными по возрастанию, глубина (расстояние между дисками) и цвет периодически изменяется).

32.Моделирование средствами OpenGL действия: окружность плавно перетекает в цилиндр, цвет периодически изменяется.

33.Моделирование средствами OpenGL действия: вращается куб, на каждой грани которого находятся различные текстуры.

34.Моделирование средствами OpenGL действия: экран заполнен текстурой, при нажатии на кнопку мыши количество текстур по горизонтали и по вертикали увеличивается вдвое.

35. Моделирование средствами OpenGL действия: текстура накладывается на цилиндр, конус, диск и частичный диск.

192

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]