View Single Post
Old 05-11-2004, 20:55   #7
alexnn
Камрад
 
Join Date: мар 2003
Location: Eindhoven
Posts: 554
Давайте как по порядку....

Во-первых забудем об ООП и других деталях имплементации.

Во-вторых для начала определим что мы ходим сделать (с точки зрения игрока/пользователя):

1. Когда пули попадают в стационарные объекты на этих объектах остаются следы от пуль.
2. Вид этих отметин разный для разных поверхностей и для разных углов попадания.

Если мы это сможем реализовать, то игре добавится следующее: будет видно где проходили жаркие бои + можно расписываться на
стенах очередью

В-третьих мы будем решать задачу ХРАНЕНИЯ И УПРАВЛЕНИЯ ИНФОРМАЦИЕЙ о дырках, а НЕ рисование дырок.

Попробуем перевести эти в более техничную плоскость:

Отметина (дырка) это плоская картинка, которая наклеивается на поверхность куда попала пуля. Имеется набор уже нарисованных картинок,
которые изображают разные отметина на разных поверхностях с разными углами.

Предположение: имеющийся в наличии 3Д движок предоставляят функциональность для рисования плоских картинок в заданных координатах
с нужной ориентацией. И эта функциональность не слишком ресурсоемка (если это не так. то тогда вопрос
о "дырках" надо ставить еще в процессе разработки движка и учесть требования на рисование дырок.)

Архитектура:
Компонент "ответственный за дырки"
Он не будет иметь своего треда. А просто будет предоставлять функциональный синхронный интерфейс
Он будет общаться с 3д движком и платформой (для работы с памятью и для использования файловой системы)
Определим функции посредством которых 3д движок будет обмениваться инфой с нашим компонентом:
1. Инициализация
Наш компонент резервирует память под цикличный массив, в котором будут храниться координаты дырок + указатели на картинки.
Размер массива зависит от установок пользователя.
Наш компонент загружает в память все картинки дырок.
2. Сообщить о дырке (координаты[x,y,z],калибр, материал, угол попадания)
исходя их этих данных наш компонент сохранит координаты, выберет "дырку" и обновит массив существующих дырок.
3. Сообщить о дырках в данной плоскости
3д движок вызывает эту функцию когда рисует поверхность. Наш компонент делает поиск с своем списке дырок и возвращает
движку список дырок лежащих на этой поверхности.
Тоже стоит наложить дополнительную функцию на движок - если две дырки перекрываются, то это ответственность движка "красиво" отобразить
перекрывающиеся дырки.


А теперь давайте посчитаем сколько нам надо памяти на данные:
Хранение инфы о дырке - 9 байт на координаты (обеспечат миллиметровую точность на 16х16х16км) +
1 байт (масштабирование - для разных калибров)+
4 байта указатель на картинку
Итого: 14 байтов на дырку. Можем запросить во время инициализации памяти килобайт на 100 и иметь местно на хранение инфы ~ 6500 дырках..

Дырки: пусть будет 10 поверхностей х 30 разных углов - 300 картинок. Ну сколько может весить картинка с дырокой? Цветов немного....
Размеры небольшие. Ну пусть 3Кб ? 300x3 ~ 1 мег... Не мало. Но он и не растет. может можно сделать картинки поменьше....
Или "по умному" их подгружать. Например сделать кэш в памяти на наиболее используемые. Скажем кэш на 300КВ... Это уже детали.

ИМХО, нет ничего невозможного для современного харда....


Критика? Дополнения? Исправления?

Last edited by alexnn; 05-11-2004 at 21:11.
alexnn is offline   [Ответить с цитированием]