- •«Северный (Арктический) федеральный университет имени м.В. Ломоносова»
- •«Северный (Арктический) Федеральный Университет имени м.В. Ломоносова»
- •Постановка задачи
- •Алгоритм удаления невидимых граней
- •Определение лицевых и не лицевых граней с помощью вектора нормали
- •2.4 Закраска трехмерного объекта с использованием простой модели освещения
- •Основные переменные и их предназначение
- •Результат
2.4 Закраска трехмерного объекта с использованием простой модели освещения
Так как расчет нормалей в нашей сцене мы уже реализовали, то добавить освещение к нашим объектам уже не составит больших проблем. Помимо освещенности будем одновременно закрашивать получившиеся поверхности объектов. Идея алгоритма состоит в следующем: будем закрашивать каждую грань объекта, умножив значение заданного цветового канала (A, R, G, B) на значение координаты Z вектора нормали. Цвет и настройки прозрачности у объектов разные, но система цветов одна, поэтому зададим предварительно значения альфа-канала для граней куба полностью непрозрачными - 255, а для граней стакана значения определим следующие: 80 для боковых граней, и 100 для основания стакана. Чем больше значение Nz будет приближаться к единице, тем меньше будет угол между нормалью и лучом света и тем соответственно больше будет интенсивность цвета.
Для закраски полигонов воспользуемся стандартной функцией закраски – FillPolygon. Данная функция заполняет внутреннюю часть полигона, определяемого массивом точек, один из двух параметров данной функции отвечает за цвет закраски. В итоге получаем простейшую, но эффектную систему освещения.
-
ОПИСАНИЕ ПРОГРАММЫ
-
Введенные типы данных и их предназначение
В таблице 3 указаны все типы данных, используемые в программе.
Таблица 3 – Типы данных, используемые в программе
|
Тип данных |
Предназначение |
|
int |
Используются для целочисленных вычислений |
|
double |
Используются для точных вычислений |
|
bool |
Используется для логических преобразований и операций |
|
int[] |
Используется в качестве массивов, хранящих целые значения (номера полигонов, вершин) |
|
double[] |
Используется в качестве массивов, хранящих вещественные числа, например массив, хранящий средние значения координаты Z |
|
Структуры |
Используются для описания координат вершин |
|
Классы |
Используются для возможности реализации методов и функций программы |
-
Основные переменные и их предназначение
Основные переменные и их предназначение рассмотрены в таблице 4.
Таблица 4 – Основные переменные и их функции
|
Переменная |
Тип данных |
Функция |
|
b |
Класс Bitmap |
Используется для работы с изображениями, определяемыми данными пикселей |
|
g |
Класс Graphics |
Инкапсулирует поверхность рисования |
|
image |
Класс Image |
Позволяет загрузить фоновое изображение для компонентов программы |
|
Vertex |
Point3D[] |
Определяет структуру координат вершин |
|
View |
Point3D[] |
Видовые координаты вершин |
|
Scrn |
Point[] |
Массив экранных координат |
|
Perspective |
Point[] |
Массив перспективных координат |
|
NZ |
double[] |
Массив, содержащий все значения координаты Z вектора нормали |
|
Order |
int[] |
Массив, задающий порядок отображения граней, порядковые номера полигонов |
|
D |
double[] |
Массив, хранящий среднее значение по координате Z плоскости |
|
Teta, Phi |
double |
Переменные, хранящие значения углов |
|
nx, ny, nz |
double |
Координаты вектора нормали |
|
R0 |
int |
Коэффициент масштабирования сцены |
|
D0 |
int |
Коэффициент перспективы сцены |
|
mousePress |
bool |
Логическая переменная, отслеживающая нажатие на кнопку мыши |
-
Описание основных процедур и функций
Рассмотрим основные функции и процедуры.
-
Процедура «ПостроитьСцену». Главная процедура, в которой происходит преобразование координат, создание полигонов, вычисление средних значений координаты Z, закрашивание поверхностей и создание модели освещения.
-
Функция «СортировкаГраней». Сортирует грани по глубине и заполняет массив упорядоченных граней для отображения.
-
Процедура «ВычислениеНормали». Вычисляет нормаль к поверхности и заполняет массив с координатой Z этой нормали.
-
Процедура «ПоказатьСцену». Данная процедура используется для перерисовки сцены.
-
Функция «Flag». Вспомогательный метод для реализации функции «СортировкаГраней». Определяет грани для сравнения.
-
Алгоритм взаимодействия процедур и функций
Рассмотрим алгоритм взаимодействия вышеописанных процедур и функций. Процедура «ПоказатьСцену» вызывается каждый раз при изменении изображения сцены, данная процедура содержит в своем теле основную процедуру программы «ПостроениеСцены». Процедура «ПостроениеСцены» помимо своих наборов действий состоит из функции: «СортировкаГраней» и функции «ВычислениеНормали». Функция «СортировкаГраней» включает в себе метод «Flag». Условная схема взаимодействия процедур и функций представлена на рисунке 2.

Рисунок 2 – Условная схема взаимодействия процедур
и функций
-
ТЕСТИРОВАНИЕ ПРОГРАММЫ
-
Описание интерфейса
При запуске программы пользователь сразу видит сцену: стакан и куб перед ним (рисунок 3).

Рисунок 3 – Интерфейс программы
Программа имеет интуитивно понятный интерфейс, то, что было заявлено, то и получилось – два объекта: прозрачный объект (стакан) и непрозрачный (куб). А также надпись на самой форме «С# Alpha Blending» говорит о теме работы, альфа смешении. Окно приложения нельзя масштабировать, можно только закрывать и сворачивать. Заголовок окна приложения также дает понять о тематике приложения.
-
Руководство по использованию программы
Данное приложение предназначено для подтверждения свойств тел, таких как прозрачность и непрозрачность, а также для наблюдения того, как ведут себя предметы, обладающие данными свойствами в пределах одной сцены. То есть прозрачное тело, перекрывая непрозрачное, должно полностью его отображать, а непрозрачное тело в свою очередь должно скрывать часть прозрачного тела или любого другого, находящегося с ним на одной сцене.
Пользователь может изучать данные предметы путем их вращения или масштабирования. Обзор сцены выполняется либо с помощью мыши, либо с помощью стрелок клавиатуры. Система управления представлена в таблице 5.
Таблица 5 – Управления сценой
|
Элемент управления |
Действие |
|
Мышь |
|
|
Зажатая ЛКМ/ПКМ |
Обзор сцены со всех ракурсов |
|
Вращение колесика |
Масштабирование +/- |
|
Нажатие ПКМ |
Привидение к сходному размеру |
|
Клавиатура |
|
|
Вверх |
Вращение сцены вертикально вверх |
|
Вниз |
Вращение сцены вертикально вниз |
|
Влево |
Вращение сцены в левую сторону |
|
Вправо |
Вращение сцены в правую сторону |
Данное приложение работает без аварийных завершений, не вызывает исключений, не перегружает систему, не помечается антивирусными системами как потенциально опасное программное обеспечение.
Минимальные системные требования:
-
операционная система Windows XP, Vista, 7 (совместимость сWindows 8 неизвестна);
-
процессор с тактовой частотой 1 Ггц или выше;
-
ОЗУ 512 Мб или выше;
-
Видеопамять 128 Мб или выше;
-
Клавиатура, мышь.
