У меня вопрос о том, как организовать мои графические ресурсы / объекты. Я импортирую сцены из 3D Studio, используя AssImp. В данный момент я обрабатываю структуры AssImp в свои собственные, чтобы я мог передавать их на диск и с диска быстрее, чем AssImp. Во всяком случае, я также обрабатываю материалы сцены, что дает мне набор вариантов, с которыми я не совсем уверен, как лучше всего справиться.
У меня есть следующие классы для материалов:
Материал
Содержит такие вещи, как окружающий, диффузный цвет, зеркальная мощность и т. Д., Также содержит массив карт, причем каждый слот в массиве является «каналом» (т. Е. Слот 0 всегда является картой окружения, слот 1 диффузный, слот 2 глянец и тд).
Карта
Экземпляр карты с такими параметрами, как режим обтекания и указатель на объект текстуры.
Texture
Карта текстур OpenGL.
Sampler
Объект сэмплера OpenGL.
Теперь мне немного интересно, как я собираюсь обращаться с настройкой сэмплеров для любой карты в материале. Технически каждая карта может иметь разные параметры сэмплера. Например, сэмплер может иметь режимы УФ-обтекания, минимальный и максимальный фильтры и анизотропию. Некоторые из этих параметров определены в сцене (режимы обтекания), а другие определены как параметры движка (фильтрация, анизотропия).
То, о чем я думаю, - это создание одного объекта-сэмплера на карту (не на текстуру, помните, карта указывает на текстуру). Затем, когда я отрисовываю объект, у которого есть материал с картой X, он автоматически привязывается в сэмплере для карты X к какому-либо каналу. Поскольку возможно, что будут тысячи карт, мне интересно, если соответствующие тысячи сэмплеров являются хорошей идеей.
Еще один способ сделать это - добавить сэмплеры в мой словарь ресурсов, чтобы их можно было использовать для любой карты с такими же параметрами.
У кого-нибудь есть мнение о том, как лучше всего управлять такими вещами?