2013-02-17 2 views
1

Скажем, для этого примера, что у меня есть Мир класс. Мир имеет коллекцию моделей:Управление эффектами 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(); 

и т.д ...

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

ответ

2

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

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

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

+0

Это то, что я ожидал. Спасибо за подтверждение и ответ –

Смежные вопросы