Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Diplonote_v1.3 RC 6.doc
Скачиваний:
3
Добавлен:
27.10.2018
Размер:
12.94 Mб
Скачать

5.2.3 Отрисовка 3d-мира

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

В первую очередь просчитывается позиция камеры и производится загрузка объектов, которые могут быть видны наблюдателю, и выгрузка объектов мира, которые пользователь не может увидеть из данной точки наблюдения. Код представлен в листинге 5.19.

Листинг 5.19 – Загрузка видимых объектов и выгрузка невидимых

if(camera.y < -900 && camera.x < 24 && camera.x > -1200){ //Мы в 802   if(!aud802loaded){     //Нужно загрузить окружение     for (i = 0. i < aud802.length. ++i)      {        rootContainer.addChild(aud802[i]).       message = aud802[i].name + " Loaded successfull".     }      infoButton.visible = true.     videoButton.visible = true.     aud802loaded = !aud802loaded.       }     } else{   if(aud802loaded){     //Нужно выгрузить окружение     for (i = 0. i < aud802.length. ++i)      {        aud802[i].parent.removeChild(aud802[i]).       message = aud802[i].name + " Unloaded successfull".     }      

Продолжение листинга 5.19        infoButton.visible = false.     videoButton.visible = false.     aud802loaded = !aud802loaded.   } }

При использовании данного приема число полигонов в кадре не превышает 5000, что является приемлемым уровнем. Без этой методики количество полигонов может достигать 30 000 (если смотреть на кафедру от лестницы до 808 аудитории), так как в поле видимости камеры попадают все объекты внутри аудиторий. При такой нагрузке число кадров в секунду редко бывает выше 3-4, что снижает общий комфорт работы. Для наглядности, ниже представлена работа данной методики.

На рисунке 5.6 представлена аудитория без объектов

Рисунок 5.6 – Аудитория без объектов

При нахождении камеры внутри аудитории все объекты динамически подгружаются. Данный метод позволяет значительно экономить вычислительные мощности, увеличивая тем самым быстродействие.

Аудитория с подгруженными объектами представлена на рисунке 5.7.

Рисунок 5.7 – Аудитория с подгруженными объектами

Так же для снижения числа отрисовки полигонов используется технология клиппинга (урезание полигонов за областью видимости камеры).

Существует несколько методик отсечения:

Если объект хотя бы частично попадает во вьюпорт – видны все полигоны видимых граней.

Видны только полигоны, часть которых во вьюпорте.

Полигоны рассекаются областью видимости и отрисовываются только те их части, что полностью видны наблюдателю.

Эти методы иллюстрируются примером который представлен на

рисунке 5.8.

Рисунок 5.8 – Методы отсечения полигонов

Наибольшее положительное влияние оказывает метод отсечения полигонов за областью видимости.

Еще меньшее количество полигонов для отрисовки создает метод рассечения полигонов, но сложность обработки каждого полигона и вычисление его рассечения полностью сводят преимущества на нет.

Так как в разрабатываемом программном комплексе доминируют сложные объекты из множества мелких полигонов, то мы используем метод полного отсечения полигонов. Для отрисовки используется метод представленный в листинге 5.20

Листинг 5.20 – Метод полного отсечения полигонов

camera.render().

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