HLFX.Ru Forum
Показать все 7 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Трудности парсинга (https://hlfx.ru/forum/showthread.php?threadid=3927)


Отправлено nemyax 23-05-2013 в 17:29:

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

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

Цитата:

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]

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


Отправлено Дядя Миша 23-05-2013 в 17:40:

Товарищи! Абстрактные задачи в сферическом ваккууме безусловно способствуют развитию абстрактного мышления, но в данном случае, нам всё-таки надо получить вполне конкретный результат, правда?
Так почему бы не рассказать, что такое 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'


Отправлено nemyax 23-05-2013 в 20:24:

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

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

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

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


Отправлено nemyax 24-05-2013 в 14:33:

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

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;

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


Отправлено Дядя Миша 24-05-2013 в 15:30:

Ну оно на манер халфовского формата устроено: там 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'


Отправлено nemyax 24-05-2013 в 17:06:

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



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

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


Отправлено Дядя Миша 24-05-2013 в 19:25:

Ну логично, у каждого полигона в принципе может быть произвольное кол-во вершин, т.е. там не трианглы, как я понял. Так что мой камент про организацию 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'


Временная зона GMT. Текущее время 01:46.
Показать все 7 сообщений этой темы на одной странице

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