Показать сообщение отдельно
Старый 31.03.2008, 19:43   #1
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Sigel::EntityShaders

хочу поговорить о "объектных шейдерах".
на досуге мне подумалось что неплохо было бы сделать возможность задания "программы обработки" для отдельных объектов.

такая программка вызывается каждый раз перед отрисовкой объекта, в ней могут использоваться все методы объекта (Entity).
пример программки которая крутит объект

void *Turner(Entity* ent)
{
ent->Turn(0,5,0);
}
назначение:
Entity *MyEnt = new Entity(sSomeSurface);
MyEnt->PreProcess(Turner); //назначение программы обработки
далее, при каждом вызове Render() при обработки объекта будет выполненна назначенная програмка. В данном случае она будет поворачивать объект на 5 граджусов по оси Y.

внимание, вопросы:

1) Как вам идея, бредовая или имеет право жить?
2) Что делать с невидимыми объектами (отрезанными по фрустум, или еще каким методом)
//лично я считаю что ничего с ними делать ненадо, в на крайняк проврека на видимость может быть осуществленна в програмке:
void *Turner(Entity* ent)
{
if(ent->isVisible())
ent->Turn(0,5,0);
}
3) Управляющие данные. Вот в Delphi (храние его аллах) у многих компонентов есть такое поле - tag, в нем можно хранить всякую служеную информацию. есть идеи относительно заведения такого поля.
смысл - например можно организвать "затухание" объекта.
void *Fader(Entity* ent)
{
ent->tag--;
ent->Alpha((float)ent->tag/100.0f);
if(ent->tag<=0)
ent->Free();
}
4) Удалить сам себя объект не может в принципе (структура <list> не позволяет удалять элемент во время перебора, хоть явного, хоть через ForEach). что делать? остается одна идея - признак удалленности проставлять. или может иметь какой то локальный список удаленных объектов, который обрабатывается после ренедра, и объекты удаляются из основного списка на рендер)
5) (не по теме).
Скрытие объектов.
сейчас у меня идет примерно такая строчка перед отрисовкой
if(ent->isVisible)
{
//тут рендер
}
собсно идея фикс (уже давно появившеяся, но так и не утвержденная по целесообразности).
скрытый объект переностися в другой список. все просто - объект не будет обрабатываться при рендере вообще. хоть 1000000 скрытых объектов - они не обрабатываются. минус метода - почти бесплатная операция по скрытию/появлению объекта становится недешевой.
внимание вопрос:
как часто вы скрываете/показываете объект. что важнее - скорость скрытия/показывания или скорость обработки?

Последний раз редактировалось HolyDel, 31.03.2008 в 19:57.
(Offline)
 
Ответить с цитированием