Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

[DirectX8] Как хранить спрайты?

Доброго времени суток, многоуважаемый ALL.

Возникла такая проблема: никак не могу придумать как в DirectX8
хранить спрайты. В виде D3D текстур, поверхностей или просто как
цветовой массив.
У кого какие мнения??

С бестами и регардами
Havoc
mailto:hav***@i*****.ru
Номер выпуска : 2301
Возраст листа : 161 (дней)
Количество подписчиков : 383
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/91959
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Havoc Sun, 29 Feb 2004 07:44:15 +0300 (#91959)

 

Ответы:

Рад приветствовать, Havoc!

Довелось мне Sunday, February 29, 2004 читать, следующее:

Хранить на диске или во время работы программы? Расскажи о специфике,
если ты чисто на 2Д ориентируешься с текстурами нет смысла
заморачиваться, т.к. если текстуры аппаратные, то и блиттинг тоже
тебе GPU по внутренней шине обеспечит (если влезешь в видеопамять),
тут не принципиально (фпс больше 1000 без проблем на 3-5 ом
поколениях, которые нынче у большинства). Если ты хочешь сам писать в
видеопамять (делая LOCK), то тут как тебе удобнее, главное только
помнить о байтовой длине PRIMARY_SURFACE.

Alles Gutes!

CU @ http://smuta.boom.ru
...In Code We Trust...
При желании, mailto:deniskravtso***@m*****.ru
Номер выпуска : 2410
Возраст листа : 162 (дней)
Количество подписчиков : 379
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/95225
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Mon, 1 Mar 2004 21:25:34 +0300 (#95225)

 

Доброго времени суток, Denis.

Monday, March 1, 2004, 9:25:34 PM:

Хранить во время работы.
Задача в следующем: Есть 3Д(2Д) модель (т.к. в ДиректХ8 нету
ДиректДрав) На нее надо вывести последовательность кадров(спрайтов)
произвольной длины. Вопрос в том - как данный механизм осуществить?
Придумалось три способа:
1) Хранить каждый кадр в отдельной текстуре, ну и накладывать
последовательно текстуры.
Плюсы - похоже, что это самая быстрая смена кадров(или нет???).
Минусы: писать в текстуру ручками(Lock) довольно долго и текстура
может быть размером только 2 в степени n - отсюда перерасход памяти(а
если еще кадров эдак под 1000:(... )
2) Создать одну текстуру, а кадры хранить как Direct3DSurface8. при
выводе нужный кадр копирывать CopyRect'ом на текстуру и вывешивать ее.
Плюсы - места занимает столько, сколько нужно Surface'у(включая кэш)
Минусы - похоже, что вывод несколько медленнее, чем у метода 1).
С Surface'ом кроме копирования сделать ничего нельзя.
Скорость Lock'а медленнее чем у метода 3)(это ИМХО)
3) Создать одну текстуру, а кадры хранить как
DWORD frame[Width][Height]и при выводе нужный кадр копирывать
Lock'ом на текстуру и вывешивать ее.
Плюсы - места занимает столько, сколько есть на самом деле.
Похоже, что самое быстрое изменение кадра.
Минусы - похоже, что вывод несколько медленнее, чем у метода 2).

Какой лучше?? т.е. оптимальнее??

ЗЫ. Пока я остановился на втором методе. Но может я неправ???

С бестами и регардами
Havoc
mailto:hav***@i*****.ru
Номер выпуска : 2451
Возраст листа : 165 (дней)
Количество подписчиков : 381
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/97137
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Havoc Fri, 5 Mar 2004 07:44:59 +0300 (#97137)

 

Рад приветствовать, Havoc!

Довелось мне Friday, March 05, 2004 читать, следующее:

А кто заставляет исп-ть ДХ8? Что мешает использованию
IDirectDrawSurface7 или хоть в отдельности IDirectDrawSurface7?
Не вижу смысла завязываться с 3Д объектами и текстурами, если всё это
реализовано в 2Д на аппаратном уровне (а если нет, так и 3Д тем более
ты от HW не получишь).

Не берусь утверждать со 100% уверенностью, но при грамотной
реализации на глаз ты разницы точно не увидишь. Т.к. если все спрайты
влезут в память на борту видяхи, копирование будет идти на внутренней
частоте видеопамяти, да и порциями не меньше 8 байт. Короче, я
получал фпс порядка 1500 на GF2MX400, тебе оно надо ;) ? Тут уже
больше ограничений по CPU/RAM. Другой вопрос хочешь ли ты
дополнительных извратов со спрайтами, которые хард не позволяет.

Хранить всё в отдельных структурах данных не самое лучшее решение.
Представь себе: какой-нибудь простенький анимированный gif (30 кадров)
лежал бы в 30 файлах gif. Куда проще объединить все кадры, скажем,
положив их друг за другом или составить из них матрицу, а к ней ещё
просчитать таблицу RECT-ов (а если все кадры одинаковой ширины/высоты,
то и на ходу можно не страшась считать).

Ну, классически все юзают спрайты с размерами степени двойки уже не
один десяток лет. Про Lock же ниже.

Как только начнёшь "лочить", данные пойдут качатся из видеопамяти в
основную (это синхра шин, нагрузка CPU и работа на частоте RAM), тут
резко упадёт фпс (заметно независимо от ХхAGP или PCI). Конечно, в
большинстве спрайтовых игр даже современного уровня таким образом
можно спокойно получить не менее 60 кадров/сек (тем более, что почти
у всех сейчас есть MMX).

ЗЫ Я переводя игрулю с ДОСа был вынужден применять Lock-и (по общей
структуре программы и необходимости динамического изменения
спрайтов). При том ФПС при однопроходной прорисовке тайлов (вывод
в RAM порциями по DWORD) не менее 300 (Cel1000/256(PC100)/GF2MX400).
Использовал DirectDraw7...

Alles Gutes!

CU @ http://smuta.boom.ru
...In Code We Trust...
При желании, mailto:deniskravtso***@m*****.ru
Номер выпуска : 2498
Возраст листа : 169 (дней)
Количество подписчиков : 380
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/99842
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Tue, 9 Mar 2004 21:21:14 +0300 (#99842)

 

Доброго времени суток, Denis.

Tuesday, March 9, 2004, 9:21:14 PM:

Необходимость.

Данная весчь будет использываться вместе с полноценным Direct3D8

Все кадры врядли влезут на борт видяхи даже с 256 Метрами памяти.

Непонял какая разница: что я буду хранить все кадры на одной текстуре,
но при этом считать для каждого кадра RECT(1) и что буду хранить
несколько Surface'ов.(2)
Я бы даже сказал, что способ(2) лучше и универсальнее:
Динамически можно подключать новые кадры к цепочке в случае
необходимости, в (1) если вылезти за рамки отведенной текстуры, то
предется заново создавать большую размером и копирывать на нее старую.

Т.е. на этот самый перерасход памяти можно со спокойной совестью
забить???

А это еще зачем????
Сказать, чтоб лочил DISCARD и WRITEONLY и ничего из видеопамяти
считываться не будет.

ЗЫ. А какие комментарии к способу номер 2?

--
С бестами и регардами
Havoc
mailto:hav***@i*****.ru
Номер выпуска : 2502
Возраст листа : 169 (дней)
Количество подписчиков : 380
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/99896
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Havoc Tue, 9 Mar 2004 22:48:48 +0300 (#99896)

 

Рад приветствовать, Havoc!

Довелось мне Tuesday, March 09, 2004 читать, следующее:

Расход памяти + лишнее время при создании интерфейсов.

Ну, тут надо всё взвесить, посмотреть какова примерная вероятность
происхождения такого, частота динамического добавления и пр. Так
сложно сказать, всё ведь зависит от специфики.

Не совсем так. Обычно под это затачиваются структуры данных (например,
часто в спрайтовых стратегиях, аркадах размер тайлов был 32-64, также
с текстурами в шутерах с первого вольфа). Хотя, например, спрайты
персонажей могли быть и произвольного размера (даже для разных
кадров, скажем, фаз движения). Вопрос в затратах - тайлов
отрисовывать штук 200 ещё и в несколько слоёв, а персонажей может
быть штук 10 на экране, это мизер в сравнении с остальным, так что
тут уже важнее фактор объёма занимаемой памяти. Короче, всё очень
специфично, нет общего рецепта. Надо пробовать и делать выводы.

Кста, не знаю какие плану у МS по ДХ, но в новом OpenGL обещали отказ
от привязки размеров к степеням 2.

ОК, это я опять применительно к тому как мне надо было. Хотя качать
туда всё равно не архибыстро. Ессно, раз объём столь велик других
решений не вижу. Кста, если не секрет, что это за графа, что её
столько одновременно надо?

Не очень понял, ты хочешь под каждый кадр отводить целый
IDirect3DSurface8?
По поводу копирования опять же всё зависит от надобностей, тут только
тебе решать хватит ли этого.

По поводу скорости - сказать нечего, т.к. не пробовал (с 3д я работал
мало, и то с использованием OpenGL). Попробуй делать замеры, что-то
прояснится.

Alles Gutes!

CU @ http://smuta.boom.ru
...In Code We Trust...
При желании, mailto:deniskravtso***@m*****.ru
Номер выпуска : 2581
Возраст листа : 173 (дней)
Количество подписчиков : 377
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/102187
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Sat, 13 Mar 2004 19:43:36 +0300 (#102187)