A-tit indd


Паттерны программирования игр



Download 3,35 Mb.
Pdf ko'rish
bet35/313
Sana05.06.2022
Hajmi3,35 Mb.
#638392
1   ...   31   32   33   34   35   36   37   38   ...   313
Bog'liq
Nistrem R. Patterni programmirovaniya igr-1

Паттерны программирования игр
— Другой взгляд на паттерны проектирования
49
и тот же меш текстуры. Значит, большинство полей 
в объектах 
одинаковы
для всех экземпляров.
Рис. 3.1.
Обратите внимание, что содержимое маленьких прямо-
угольников одинаково для всех деревьев
Явно это реализуется путем разбиения класса на два. 
Сначала мы выбираем данные, общие для всех деревьев, 
и перемещаем их в отдельный класс:
class TreeModel
{
private:
Mesh mesh_;
Texture bark_;
Texture leaves_;
};
Для игры требуется только один объект этого класса, 
поскольку нет причин хранить в памяти тысячи копий 
одинаковых мешей и текстур. Затем в каждом 
экзем-
пляре
дерева в игре указываем 
ссылку
на объект клас-
са 
TreeModel
. То, что остается в классе 
Tree
, — специ-
фичное для экземпляра состояние:
class Tree
{
private:
TreeModel* model_;
Vector position_;


50
Приспособленец (Flyweight) — 
Паттерны программирования игр
double height_;
double thickness_;
Color barkTint_;
Color leafTint_;
};
Визуально это можно представить так:
Рис. 3.2.
Четыре экземпляра дерева, совместно 
использующие модель
Все это очень здорово и полезно для хранения в ос-
новной памяти, но не помогает ускорить процесс визуа-
лизации. До того как лес появится на экране, он должен 
пройти через графический процессор. Нам нужно орга-
низовать разделение ресурса так, чтобы обеспечить под-
держку видеокартой.
Тысячи экземпляров
Если мы хотим свести к минимуму количество дан-
ных, которые следует передать графическому процес-
сору, нам нужна возможность отправить общие дан-
ные —
TreeModel
— только 
один
раз. Затем отдельно 
мы отправим все уникальные данные экземпляра дере-
ва: его позицию, цвет и масштаб. Наконец, мы сообщим 
графическому процессору: «Используй эту модель для 
визуализации каждого из экземпляров».
К счастью, на сегодня графические API и карты под-
держивают такую возможность. Детали сложны и выхо-
дят за рамки моей книги, но как Direct3D, так и OpenGL 
поддерживают так называемый 
дублирующий рендер 
(instanced rendering)
.
Это очень похоже 
на паттерн Объект типа 
(Type Object) (с. 248). 
Оба они подразумевают 
делегирование части со-
стояния объекта дру-
гому объекту, совместно 
используемому не-
сколькими экземпля-
рами. Однако области 
применения паттернов 
отличаются.
В паттерне Объект 
типа (Type Object) цель 
состоит в том, чтобы 
свести к минимуму ко-
личество классов, кото-
рые вы должны объ-
явить, путем добавления 
«типов» в собственную 
объектную модель. Если 
при этом объекты будут 
Download 3,35 Mb.

Do'stlaringiz bilan baham:
1   ...   31   32   33   34   35   36   37   38   ...   313




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish