Каков лучший шаблон проектирования для обработки сцены, которая может пройти несколько этапов? - PullRequest
1 голос
/ 10 апреля 2009

Вот моя проблема.

Я пытаюсь написать небольшой простой игровой движок (я делаю это, чтобы улучшить свои дизайнерские навыки). У меня есть Scene Object, который содержит все, что нужно API рендеринга для его рендеринга.

Естественно, я бы хотел, чтобы моя сцена была невосприимчива к будущим изменениям, а это означает, что будущие изменения в ней не будут нарушать ее интерфейс. Например, если я хочу, чтобы в будущем моя сцена имела функцию Fog, которую можно включать и выключать, я хочу иметь возможность добавлять ее, не нарушая интерфейс моей сцены.

Одна важная вещь заключается в том, что API рендеринга связывается со сценой через интерфейс (который, очевидно, называется «IScene»)

Мои мысли направлены на шаблон "Декоратор", кто-нибудь может предложить что-то более подходящее?

1 Ответ

2 голосов
/ 10 апреля 2009

Предлагаю взглянуть на существующих API . Вы скоро поймете, что это не простая проблема. Туман может быть фильтром (равномерным по экрану), но это выглядит нереально. Туман должен быть больше похож на полупрозрачное облако возле земли. Таким образом, рендеринг в виде одного или нескольких полупрозрачных серых объектов может быть более реалистичным, но может оказаться невозможным реализовать с использованием текущего оборудования.

[РЕДАКТИРОВАТЬ] Что я пытаюсь сказать: простого шаблона декоратора, вероятно, недостаточно для достижения какого-либо сложного эффекта. Я не видел много движков, но большинство используют очень простой объект сцены, который сохраняет только некоторые глобальные объекты (окружающий свет, положение камеры, размер экрана), а также список объектов для отображения. Затем объекты содержат дополнительную информацию.

Эти вещи довольно глупы. Рендерер возьмет информацию, хранящуюся в этих объектах, и преобразует их в то, что может использовать аппаратное обеспечение дисплея.

Опять же, я советую получить некоторые идеи из существующих API, потому что они уже сделали все ошибки.

...