Управление эффектами HLSL

Скажем, для этого примера, что у меня есть Мир учебный класс. Мир имеет коллекцию модели :

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();

так далее…

Может быть, вся моя точка зрения неверна, и это нужно сделать иначе?

1

Решение

Я думаю, что вы должны использовать оба ваших метода. То есть:

  1. Каждая модель имеет свой собственный связанный эффект: model->Bind(effect);
  2. Вы управляете эффектами отдельно (по соображениям эффективности):
    1. Сортировка моделей по эффектам, которые они используют
    2. Для каждого эффекта:
      • Настройте эффект
      • Визуализация всех моделей, связанных с текущим эффектом

Модели, которые должны отображаться в фиксированном порядке (например, прозрачные объекты), должны обрабатываться по-разному, если только все они не имеют одинакового эффекта.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]