Скажем, для этого примера, что у меня есть Мир учебный класс. Мир имеет коллекцию модели :
class World
{
public:
map<string, Model*> Models;
};
Модель будет абстрактным классом для всех сущностей в приложении, например, автомобиль, мяч, гора или куб.
И вопрос в том, что является лучшей практикой для управления эффектами для этих моделей. Допустим, у меня есть 4 файла эффекта: base1.fx, base2.fx, base3.fx, bas4.fx. Каждый из них имеет интерфейс класса, который может быть привязан к модели ( IBaseEffect1, IBaseEffect2, IBaseEffect3, IBaseEffect4 ).
Теперь я должен считать каждую модель независимой и сделать что-то вроде:
Cube1.Bind(IBaseEffect2);
Car.Bind(IBaseEffect3);
Где модель будет иметь возможность управлять эффектом, поэтому я бы сделал:
World::Render()
{
foreach model -> Render();
}
Что является актуальным решением для моего двигателя.
Или лучше было бы управлять независимыми эффектами и делать что-то вроде:
IBaseEffect1.SetAsActual();
foreach Model which should be considered for effect1 -> Render();
IBaseEffect2.SetAsActual();
foreach Model which should be considered for effect2 -> Render();
так далее…
Может быть, вся моя точка зрения неверна, и это нужно сделать иначе?
Я думаю, что вы должны использовать оба ваших метода. То есть:
model->Bind(effect);
Модели, которые должны отображаться в фиксированном порядке (например, прозрачные объекты), должны обрабатываться по-разному, если только все они не имеют одинакового эффекта.
Других решений пока нет …