Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив2 / курсовая docx17 / Moya_kursovaya (2).docx
Скачиваний:
30
Добавлен:
07.08.2013
Размер:
2.62 Mб
Скачать
  1. Постановка задачи

В данной работе требуется реализовать альфа-смешение, то есть создать трехмерные модели двух предметов: один прозрачный, другой нет. Цель работы заключается в том, чтобы наглядно показать свойства прозрачных тел, а именно отображение непрозрачного предмета сквозь прозрачный и сокрытие прозрачного предмета (или его части) за непрозрачным.

Создаваемая сцена будет состоять из двух предметов: трехмерной модели граненого стакана и модель куба. Стакан будет исполнять роль прозрачного предмета, а куб – непрозрачного. Стакан состоит из 20 боковых граней и грани основания стакана, все грани должны быть прозрачными. Куб – стандартная геометрическая модель, имеющая 6 граней, выполненных в форме правильных прямоугольников, квадратов. Данная сцена должна отражать эффект прозрачности и эффект освещения.

Рассмотрим координаты вершин модели стакана (таблица 1).

Таблица 1 – Координаты вершин модели стакана

Номер вершины

Координата Х

Координата Y

Координата Z

0

-50

-50

0

1

-48

-50

-15

2

-40

-50

-30

3

-28

-50

-42

4

-15

-50

-48

5

0

-50

-50

6

15

-50

-48

7

28

-50

-42

8

40

-50

-30

Продолжение таблицы 1

Номер вершины

Координата Х

Координата Y

Координата Z

9

48

-50

-15

10

50

-50

0

11

48

-50

15

12

40

-50

30

13

28

-50

42

14

15

-50

48

15

0

-50

50

16

-15

-50

48

17

-28

-50

42

18

-40

-50

30

19

-48

-50

15

20

-60

100

0

21

-58

100

-19

22

-48

100

-36

23

-35

100

-50

24

-18

100

-58

25

0

100

-60

26

18

100

-58

27

35

100

-50

28

48

100

-36

29

58

100

-19

30

60

100

0

31

58

100

19

32

48

100

36

33

35

100

50

34

18

100

58

35

0

100

60

36

-18

100

58

37

-35

100

50

38

-48

100

36

39

-58

100

19

В данном случае стакан представлен в цилиндра, с более широким верхом и менее широким основанием. Вершины от 0 по 19 составляют основание стакана, с помощью этого диапазона вершин строится грань основания стакана. Вершины от 20 до 39 составляют верхнюю грань стакана, но учитываю специфичную форму сосуда, грань из этих вершин строить не будем. В данном стакане предусмотрено 20 боковых граней, каждая грань строится по принципу соединения вершин в один полигон, например: одна из боковых граней имеет вершины 0, 20, 21, 1 (цикл: i, i + 20, i + 21, i + 1).

Рассмотрим координаты вершин куба с ребром 50 (таблица 2).

Таблица 2 – Координаты вершин куба

Номер вершины

Координата Х

Координата Y

Координата Z

Основание куба

40

-60

-50

-65

41

-60

-50

-115

42

-10

-50

-115

43

-10

-50

-65

Верхняя грань

44

-60

0

-65

45

-60

0

-115

46

-10

0

-115

47

-10

0

-65

Модель куба собирается по аналогичному принципу моделирования стакана, сначала формируем грань основания, потом верхнюю грань, а потом создаем боковые грани. Каждая грань куба задается 4 вершинами. Так как эти две модели образуют единую сцену, то координаты отсчитываются по единой системе, а также номера вершин задаются по порядку. В дальнейшем к разрабатываемым объектам сцены будет применено закрашивание граней, введение прозрачности и создание освещения всей сцены.

  1. ОПИСАНИЕ ИСПОЛЬЗУЕМЫХ АЛГОРИТМОВ

    1. Преобразование координат

В предыдущем разделе для построения трехмерных объектов были заданы координаты вершин объектов в мировой системе координат. Необходимо получить из заданных координат видовые (и экранные для ортогональной проекции) координаты. Для видовых координат следует применить перспективные преобразования для придачи разрабатываемым объектам реалистичности. Конечно, можно собрать трехмерную модель без использования перспективного преобразования, но тогда возможен так называемый обман зрения, возникающий из-за ракурса модели, но применив перспективные преобразования, данный эффект исчезнет. Экранные координаты вершин получим после того, как к видовым координатам применим перспективные преобразования, в данном случае и будем собирать наши модели.

// Видовые координаты

View[i].x = 20 * (int)Math.Round(Vertex[i].x * (-Math.Sin(teta)) + Vertex[i].y * Math.Cos(teta));

View[i].y = 20 * (int)Math.Round(Vertex[i].x * (-Math.Cos(phi) * Math.Cos(teta)) - Vertex[i].y * (Math.Cos(phi) * Math.Sin(teta)) + Vertex[i].z * Math.Sin(phi));

View[i].z = -20 * (int)Math.Round(Vertex[i].x * (-Math.Sin(phi) * Math.Cos(teta)) - Vertex[i].y * (Math.Sin(phi) * Math.Sin(teta)) - Vertex[i].z * (Math.Cos(phi)) + R0);

// Перспективное преобразование

Perspective[i].X = pictureBox1.Width / 2 + (int)Math.Round(D0 * (View[i].x / View[i].z));

Perspective[i].Y = pictureBox1.Height / 2 + (int)Math.Round(D0 * (View[i].y / View[i].z));

// Получение экранных координат

Scrn[i].X = (int)Perspective[i].X + pictureBox1.Width / 2;

Scrn[i].Y = (int)Perspective[i].Y + pictureBox1.Height / 2;

Рисунок 1 – Получение экранных координат

Более подробный алгоритм можно показан в приложении А, где указан листинг программы.

Соседние файлы в папке курсовая docx17