![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Отрисовка 3D-мира
Для оптимизации работы комплекса и увеличения FPS используется несколько основополагающих приемов. В первую очередь просчитывается позиция камеры и производится загрузка объектов, которые могут быть видны наблюдателю, и выгрузка объектов мира, которые пользователь не может увидеть из данной точки наблюдения. Код представлен в листинге 5.19. Листинг 5.19 – Загрузка видимых объектов и выгрузка невидимых if(camera.y < -900 & & camera.x < 24 & & camera.x > -1200){ //Мы в 802 Продолжение листинга 5.19 При использовании данного приема число полигонов в кадре не превышает 5000, что является приемлемым уровнем. Без этой методики количество полигонов может достигать 30 000 (если смотреть на кафедру от лестницы до 808 аудитории), так как в поле видимости камеры попадают все объекты внутри аудиторий. При такой нагрузке число кадров в секунду редко бывает выше 3-4, что снижает общий комфорт работы. Для наглядности, ниже представлена работа данной методики. На рисунке 5.6 представлена аудитория без объектов Рисунок 5.6 – Аудитория без объектов При нахождении камеры внутри аудитории все объекты динамически подгружаются. Данный метод позволяет значительно экономить вычислительные мощности, увеличивая тем самым быстродействие. Аудитория с подгруженными объектами представлена на рисунке 5.7. Рисунок 5.7 – Аудитория с подгруженными объектами Так же для снижения числа отрисовки полигонов используется технология клиппинга (урезание полигонов за областью видимости камеры). Существует несколько методик отсечения: Если объект хотя бы частично попадает во вьюпорт – видны все полигоны видимых граней. Видны только полигоны, часть которых во вьюпорте. Полигоны рассекаются областью видимости и отрисовываются только те их части, что полностью видны наблюдателю. Эти методы иллюстрируются примером который представлен на рисунке 5.8. Рисунок 5.8 – Методы отсечения полигонов Наибольшее положительное влияние оказывает метод отсечения полигонов за областью видимости. Еще меньшее количество полигонов для отрисовки создает метод рассечения полигонов, но сложность обработки каждого полигона и вычисление его рассечения полностью сводят преимущества на нет. Так как в разрабатываемом программном комплексе доминируют сложные объекты из множества мелких полигонов, то мы используем метод полного отсечения полигонов. Для отрисовки используется метод представленный в листинге 5.20 Листинг 5.20 – Метод полного отсечения полигонов camera.render().
|