HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Трудности парсинга
Это вам не пирсинг
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4173

Рейтинг



Трудности парсинга

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

Цитата:

0,0,31,0,62,0,93,0,124,0,155,0,186,0,223,0,4,1,41,1,
78,1,115,1,152,1,189,1,226,1,7,2,44,2,81,2,118,2,155,
2,192,2,229,2,22,3

Структ такой:
C++ Source Code:
1
typedef struct mds_node_raw {
2
  mde_node type;       // type of node
3
  mds_sphere  sphere;  // bounding sphere of node
4
  ushort   num;		   // number of polys
5
  ushort   polys[];    // polygon list
6
} mds_node_raw;

Отсюда вроде как следует, что в байтах содержатся индексы полигонов (ushort polys[];). На каждый индекс якобы по одному unsigned short int-у, стало быть по 2 байта.
Когда я пытаюсь распарсить последовательность,
C++ Source Code:
get_indices(Bin) ->
[I || <<I:16/little>> <= Bin].

индексы получаются огромными и идут с каким-то шагом:
Цитата:

[0,31,62,93,124,155,186,223,260,297,334,371,
408,445,482,519,556,593,630,667,704,741,790]

Очевидно, это не просто инты, а что-то другое. Могут ли это быть какие-нибудь указатели? Как интерпретировать эти штуки?

Сообщить модератору | | IP: Записан
Сообщение: 120411

Старое сообщение 23-05-2013 17:29
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32599
Нанёс повреждений: 392 ед.

Рейтинг



Товарищи! Абстрактные задачи в сферическом ваккууме безусловно способствуют развитию абстрактного мышления, но в данном случае, нам всё-таки надо получить вполне конкретный результат, правда?
Так почему бы не рассказать, что такое MDS?
Если это формат от Raven, так его структуры давно уже открыты.

Добавлено 23-05-2013 в 21:40:

ЗЫ. polygon list is variable sized. Ну просто напоминаю

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 120413

Старое сообщение 23-05-2013 17:40
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4173

Рейтинг



Цитата:
Дядя Миша писал:
нам всё-таки надо получить вполне конкретный результат, правда?

Конкретика в прицепе.
Цитата:
Дядя Миша писал:
Так почему бы не рассказать, что такое MDS?
Если это формат от Raven, так его структуры давно уже открыты.

Это формат проп-мешей для Dark Engine-а (.bin). Хедер взят из утечных исходников движка, так что эти структуры тоже кхм кхе кхе так сказать открыты. Только я всё равно в сях ничего не соображаю, так что толку-то.
Вот и обращаюсь к людям, которые этих парсеров уже обписались. Вдруг вы на практике сталкивались с упаковкой индексов через ж по-особенному.
Цитата:
Дядя Миша писал:
polygon list is variable sized. Ну просто напоминаю

Там выгрызалка отрабатывает корректно и число индексов сходится. Последовательность начинается и заканчивается ровно там, где надо.

Вложение: mds.h.zip (3.5 кб)
Этот файл был скачан 125 раз.

Сообщить модератору | | IP: Записан
Сообщение: 120417

Старое сообщение 23-05-2013 20:24
- За что?
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4173

Рейтинг



Думается, это не индексы, а адресация по куску данных, определяющих полигоны. То есть по последовательности вот таких чувачков:

C++ Source Code:
1
typedef struct mds_pgon {
2
  ushort   index;   // absolute index of pgon
3
  ushort   data;    // color or tmap indice
4
  ubyte    type;    // bit field
5
  ubyte    num;     // number of verts
6
  ushort   norm;    // index of normal of pgon (in object space)
7
  float    d;       // plane equation coefficient to go with normal
8
  ushort   verts[]; // vertex indices, then light indices, then uv
9
  // indices, optionally
10
} mds_pgon;

Буду проверять.

Сообщить модератору | | IP: Записан
Сообщение: 120439

Старое сообщение 24-05-2013 14:33
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32599
Нанёс повреждений: 392 ед.

Рейтинг



Ну оно на манер халфовского формата устроено: там raw-вертексы.
short - vertex index
short - normal index
short - U * multiplier
short - V * multiplier
short == 0 - end of array
судя по каменту.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 120443

Старое сообщение 24-05-2013 15:30
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4173

Рейтинг



Это действительно оказалась адресация. Теперь всё читается:



Как говорится:

Цитата:
PLut писал:
В который раз убеждаюсь, что лучше протрезветь и сделать как нужно, а не бежать на форум с просьбами о помощи.

Сообщить модератору | | IP: Записан
Сообщение: 120451

Старое сообщение 24-05-2013 17:06
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32599
Нанёс повреждений: 392 ед.

Рейтинг



Ну логично, у каждого полигона в принципе может быть произвольное кол-во вершин, т.е. там не трианглы, как я понял. Так что мой камент про организацию raw-vertex тоже к месту.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 120455

Старое сообщение 24-05-2013 19:25
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 07:23. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Трудности парсинга
Это вам не пирсинг
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024