Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » "Пул наборов вершин" or something | страница 1
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 1 из 1
 
Поиск в этой теме:
Канал Игры Мечты: «"Пул наборов вершин" or something»
Endeavour
 1015 EGP


Рейтинг канала: 1(2)
Репутация: 105
Сообщения: 7041
Откуда: guess
Зарегистрирован: 26.05.2005
Не нашел топика подходящего, почему-то...

В общем пинаю тут директ3д джаст фор фан, давно хотелось Улыбка И пишу сразу с претензией на универсальность.
Дошел в туториале до CreateVertexBuffer, и сейчас хочу сделать контейнер для этих наборов вершин, чтобы было типа:
IngameObjectPool[ИНГЕЙМ_КУБИК_НАМБА_1] // свойства конкретного объекта, включая его id, трансформ, id_вершин, чтотоеще.
ModelPool[ТИПИЧНЫЙ_КУБИК] // refcount, буфер вершин, уникальный id набора

Вот с последним что-то у меня не получается. Уникальный ид - чтобы не загружать одну и ту же модель 100500 раз. Была мысль делать црц32 от полного имени файла модели, но что-то как-то она мне не нравится Подозрение.
Второй вариант - делать идшники руками, но как - не пойму.
Как правильно это делается?

* модель в данном тексте - просто набор вершин ;]

И второй вопрос по пути: map или vector? Хы...

язык c++

Последний раз редактировалось: Endeavour (18:01 07-07-2011), всего редактировалось 2 раз(а)
    Добавлено: 15:29 07-07-2011   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
да обычным вектором можно. последовательный доступ к памяти рулит.
или хеш мапу по строке, но я не думаю что у тебя моделей будет настолько много, чтобы ощутить все прелести поиска за О(1).
_________________
MOV topka, C++
    Добавлено: 16:18 07-07-2011   
Endeavour
 1015 EGP


Рейтинг канала: 1(2)
Репутация: 105
Сообщения: 7041
Откуда: guess
Зарегистрирован: 26.05.2005
основной вопрос про идшники, как правильно их сделать.
    Добавлено: 16:38 07-07-2011   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
id = string, который file name, если это вектор.
или хеш функция строки, если тебе зачем-то надо делать хеш мапу.
_________________
MOV topka, C++
    Добавлено: 17:06 07-07-2011   
Endeavour
 1015 EGP


Рейтинг канала: 1(2)
Репутация: 105
Сообщения: 7041
Откуда: guess
Зарегистрирован: 26.05.2005
если тупо по строке, то получится как-то так
Код:
render_loop(){
 BeginScene();
 foreach(IngameObjects as iteratorIngame){
  apply_transform(iteratorIngame->TransformMatrix);
  render_vertices( Models[iteratorIngame->IdString].VertexBuffer );
 }
 EndScene(); Present();
}
не медленно?

зы псевдокод, поэтому синтаксис мап, для удобства.

добавлено спустя 2 минуты:
либо я все взаимосвязи контейнеров не так представил %)

добавлено спустя 1 минуту:
зызы язык c++

Последний раз редактировалось: Endeavour (18:01 07-07-2011), всего редактировалось 4 раз(а)
    Добавлено: 18:01 07-07-2011   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
если речь идет о поиске строки

for(int i = 0; i < models.size(); ++i)
if(models[i].id == iteratorIngame->IdString)
render_...

то нет, это не будет узким местом. лучше всего - пиши оба варианта и делай замеры.
какого размера models? если до 100 - не делай замеры - это точно быстрее чем мап
_________________
MOV topka, C++
    Добавлено: 18:24 07-07-2011   
Endeavour
 1015 EGP


Рейтинг канала: 1(2)
Репутация: 105
Сообщения: 7041
Откуда: guess
Зарегистрирован: 26.05.2005
речь о том, что сравнение цифровых айдишников по-моему сильно побыстрее сравнения строк, учитывая что это делается для каждого объекта в каждом кадре.
основной вопрос: если делать эту связь цифровыми id - как их создавать, чтобы обеспечить уникальность. Может хранить просто число для рендер-цикла, и имя файла для проверки при подгрузке новых моделей?

вопрос про контейнер побочный вообще, скоорее всего вектор возьму и все.
    Добавлено: 18:42 07-07-2011   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
// Hash function used for lump names.
// Must be mod'ed with table size.
// Can be used for any 8-character names.
// by Lee Killough
unsigned W_LumpNameHash(const char *s)
{
unsigned hash;
(void) ((hash = toupper(s[0]), s[1]) &&
(hash = hash*3+toupper(s[1]), s[2]) &&
(hash = hash*2+toupper(s[2]), s[3]) &&
(hash = hash*2+toupper(s[3]), s[4]) &&
(hash = hash*2+toupper(s[4]), s[5]) &&
(hash = hash*2+toupper(s[5]), s[6]) &&
(hash = hash*2+toupper(s[6]),
hash = hash*2+toupper(s[7]))
);
return hash;
}
из Doom3

или вот

http://www.cse.yorku.ca/~oz/hash.html

нашел в гугле на запрос "хэш функция для строк"
_________________
MOV topka, C++
    Добавлено: 19:07 07-07-2011   
Варсик
 545 EGP


Рейтинг канала: 4(81)
Репутация: 117
Сообщения: 4041
Откуда: Москва
Зарегистрирован: 22.12.2002
Все просто... Представляем что все модели непрерывно лежат в файле со всей информацией. Делаем на этот файл MapViewOfFile, тогда разумно что-бы ID'ы моделей были оффсетами в этом файле. И уникальность и быстродействие :P
_________________
WARNING: By reading this post you accept that this post is genius.
    Добавлено: 19:13 07-07-2011   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Преждевременная оптимизация. Лучше оставить возможность в движке сделать это позже. Зачем париться сейчас?
_________________
MOV topka, C++
    Добавлено: 19:23 07-07-2011   
Варсик
 545 EGP


Рейтинг канала: 4(81)
Репутация: 117
Сообщения: 4041
Откуда: Москва
Зарегистрирован: 22.12.2002
Юрец, спецом для тебя буду писать <сарказм моде он> и <сарказм моде офф> в следующий раз.
_________________
WARNING: By reading this post you accept that this post is genius.
    Добавлено: 20:24 07-07-2011   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Гы-гы
Я тут стриминг пишу, поэтому для меня это был не сарказм.

Посмотрел - у меня сделано через

hash_map<string, IResource*> mResourcesMap;

STL сам их хеширует. Если не надо STL - бери EASTL
_________________
MOV topka, C++
    Добавлено: 12:07 08-07-2011   
Канал Игры Мечты: «"Пул наборов вершин" or something»
 
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Пилот! Будь честным, благородным и нефлудливым, как завещал нам великий Бреннан, как учит нас КП всея ЕГи! (Grebomet)

  » "Пул наборов вершин" or something | страница 1
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18