Jump to content
Korean Random
Dragon armor

Мод "Эмулятор сервера World of Tanks".

Recommended Posts

@SkepticalFox Там один флаг. Проверка только на &1.

Объект видимый, это разрушаемое по секциям здание. Но на момент создания карты должно быть невидимо.

3 минуты назад, SkepticalFox сказал:

я про bsmo_models_id в BSMI

Вот он содержит все используемые объекты. И разрушаемые, и неразрушаемые.

Share this post


Link to post

Short link
Share on other sites

В таблице BSMI.8_12 индексы 0 и 1 - это новые объекты, которые появятся в замен разрушенного. 4 объекта соответствуют трём разрушаемым секциям и один - это основание.

1 минуту назад, SkepticalFox сказал:

Мы не юзаем в nuTerra chunkmodels

Просто меня смутило твоё описание разрушаемых объектов. На всякий случай, решил спросить. Вдруг сам ошибся. Тогда всё норм.

@SkepticalFox Тогда встречный вопрос. А как обходите вывод разрушамых объектов? Они же мешаться будут.

Если всё подряд из bsmo_models_id выводить.

Share this post


Link to post

Short link
Share on other sites

Странно, зачем им дублировать эту инфу

В bsmo есть же уже ...

Все, до меня дошло, это default state инстанса 

Share this post


Link to post

Short link
Share on other sites
4 minutes ago, Dragon armor said:

Требуется расшифровка.

ты меня окончаткльно запутал

28 minutes ago, Dragon armor said:

А как обходите вывод разрушамых объектов? Они же мешаться будут.

Если всё подряд из bsmo_models_id выводить.

я же написал, там только неразрушенные - я не прав?

Share this post


Link to post

Short link
Share on other sites
1 минуту назад, SkepticalFox сказал:

я же написал, там только неразрушенные - я не прав?

Если выводить всё подряд из bsmo_models_id, то будут и разрушаемые объекты, и неразрушаемые. Одни накладываются на другие и даже не заметно, что их больше одного.

Share this post


Link to post

Short link
Share on other sites

@Dragon armor 
значит неправильно выводишь =)

там геометрия разрушенного объекта в отдельном render блоке, по идее ты лишние грузишь

bsmo.models_loddings => bsmo.lod_renders => bsmo.renders

эта цепочка должна быть правильно реализована

у нас в nuTerra нет разрушенных объектов (после того как я пофиксил обработку bsmo.renders)

до фикса под трубами были разрушенные трубы, к примеру

image.thumb.png.3a014a103bb8fb34683b13c7b3a78f06.png

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites
3 минуты назад, SkepticalFox сказал:

там геометрия разрушенного объекта в отдельном render блоке, по идее ты лишние грузишь

Загружаю файл из render_item->verts_name_fnv и render_item->prims_name_fnv для вершин и индексов соответственно.Секцию BWSG не использую. Это предварительная загрузка моделей, чтобы не дублировать информацию.

А потом прохожу по секции BSMI, количество моделей беру из map.BSMI.bsmi.chunk_models.count, хотя без разницы, из какой таблицы брать, нулевой, первой.

Даже если лишнее гружу, то не использованная модель не должна вовсе выводиться. Но, как уже написал, специально проверил, сколько загруженных моделей используется. И все из секции BSMO используются в BSMI.bsmo_models_id.

Может и неправильно делаю. Попробую пока что разобраться с разрушаемыми объектами, чтобы они разрушаться начали.

Вот два скрина из вьювера.

Первый - загружаю только видимые объекты (условие (chunk_model[ i ].unknown & 1) && (2 & map.BSMI.bsmi.visibility_masks.chunk_4[ i ].index) != 0.

Второй - инвертирование условия. Два объекта (неразрушаемые изначально) исчезли.

s9.thumb.jpg.25ae013c78e011d7836fb979f5eaff90.jpgs8.thumb.jpg.c0df0f7372ef9b5a39162c6a427479a0.jpg

Share this post


Link to post

Short link
Share on other sites
21 minutes ago, Dragon armor said:

Загружаю файл из render_item->verts_name_fnv и render_item->prims_name_fnv для вершин и индексов соответственно

так в том и дело, что не весь файл нужен, а только группы примитивов из него, которые указаны в bsmo.renders

21 minutes ago, Dragon armor said:

И все из секции BSMO используются в BSMI.bsmo_models_id.

это правда относитьлно models_loddings

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites
24 минуты назад, SkepticalFox сказал:

bsmo.models_loddings => bsmo.lod_renders => bsmo.renders

Для простоты у меня сейчас нет лодов. Беру первый индекс из bsmo.models_loddings->index0, по нему затем прохожу по всем элементам от bsmo.lod_renders->index0 до bsmo.lod_renders->index1. Для каждой части загружаю материал. В общем, цепочка таблиц 0-7-8.

4 минуты назад, SkepticalFox сказал:

так в том и дело, что не весь файл нужен, а только группы примитивов из него, которые указаны в bsmo.renders

А там указывается группа примитивов. До этого думал, что только index и vertex бывают, а потом попробовал загрузить другую карту. Пришлось исправлять и делать загрузку именно из этих двух строк verts_name_fnv и prims_name_fnv.

Подозреваю, мы об одном и том же говорим. Если у тебя всё загружается правильно и у меня правильно.

Share this post


Link to post

Short link
Share on other sites
1 minute ago, Dragon armor said:

А там указывается группа примитивов.

где там? verts_name_fnv указывает на секцию с вершинами, prims_name_fnv указывает на секцию с треугольниками, на группы примитивов указывет "primitive_index"

его используешь?

Share this post


Link to post

Short link
Share on other sites
3 минуты назад, SkepticalFox сказал:

его используешь?

Да. У меня даже ассерт есть

assert(primitives.groupe_count > render_item->primitive_index);

 

primitives - это загруженные секции из файла. А название секций из verts_name_fnv и prims_name_fnv.

verts_name_fnv и prims_name_fnv это такие вот строки

content/Environment/env044_AFStones/normal/lod0/env044_AFStone2.primitives/indices
content/Environment/env044_AFStones/normal/lod0/env044_AFStone3.primitives/vertices

Достаточно обрезать до primitives/ и название нужных секций есть.

Share this post


Link to post

Short link
Share on other sites
2 minutes ago, Dragon armor said:

У меня даже ассерт есть

так, и что? а больше кода где используется primitive_index ?)

Share this post


Link to post

Short link
Share on other sites
1 минуту назад, SkepticalFox сказал:

а больше кода где используется primitive_index ?)

scene::IVertexBuffer *vertex_buffer = Create_Vertex_Buffer(&primitives);

Тут без индекса. Вершины же едины для секции?

scene::CDynamicMeshBuffer *buffer = Create_Mesh_Buffer(&primitives, render_item->primitive_index, vertex_buffer, indexType);

Тут индексы загружаю.

static scene::CDynamicMeshBuffer * Create_Mesh_Buffer(primitives_s *prim, const uint32_t groupe_index, scene::IVertexBuffer *vertex_buffer, const video::E_INDEX_TYPE indexType)
{
	scene::CDynamicMeshBuffer *buffer = new scene::CDynamicMeshBuffer(video::EVT_STANDARD, indexType);
	scene::IIndexBuffer &indixes = buffer->getIndexBuffer();
	buffer->setVertexBuffer(vertex_buffer);

	indixes.set_used(prim->groupe[groupe_index].triangles_count * 3);
	memcpy(
		indixes.getData(),
		prim->groupe[groupe_index].index_offset * prim->index_size + prim->indices,
		prim->index_size * prim->groupe[groupe_index].triangles_count * 3);
	indixes.setHardwareMappingHint(scene::EHM_STATIC);

	buffer->recalculateBoundingBox();
	return buffer;
}

 

Дальше коллизию создаю тем же способом, что загружал вершины и индексы.

typedef struct vertex_data_s
{
	uint32_t count;
	vec3_t *position;
	vec3_t *normal;
	vec2_t *uv;
} vertex_data_s;

typedef struct primitives_s
{
	uint32_t index_size;
	uint32_t index_count;
	uint8_t *indices;
	triangle_groupe_s *groupe;
	uint32_t groupe_count;
	vertex_data_s vertex_data;
} primitives_s;

 


typedef struct triangle_groupe_s
{
	uint32_t index_offset;
	uint32_t triangles_count; // Count of indexes = 3 * triangles_count
	uint32_t vertex_offset;
	uint32_t vertex_count;
} triangle_groupe_s;

 

Share this post


Link to post

Short link
Share on other sites

по логике тут вроде у тебя все правильно

<hd_env_112_20_FochStatue.visual>
  <renderSet>
    <geometry>
      <primitiveGroup>    0      <material>
          <identifier>    d_metal1_1    </identifier>
      <primitiveGroup>    1      <material>
          <identifier>    d_stone0_1    </identifier>
      </primitiveGroup>
      <primitiveGroup>    2      <material>
          <identifier>    n_metal1_1    </identifier>
      </primitiveGroup>
      <primitiveGroup>    3      <material>
          <identifier>    n_stone0_1    </identifier>
      </primitiveGroup>
      <primitiveGroup>    4      <material>
          <identifier>    s_nd0    </identifier>
      </primitiveGroup>
    </geometry>
  </renderSet>
</hd_env_112_20_FochStatue.visual>

Вот для примера visual файл (оставил только интересные места)

Если identifier начинается на d_ -> это destroyed объект, если n_ -> normal

Они все в отдельных группах примитивов, почему я и говорю, что проблема скорее всего здесь

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

@SkepticalFox Только до этого файла не добраться из space.bin. Загрузка у меня только из того, что привёл. Нужная группа, возможно, не совсем правильно у меня выбирается. Но раз есть строка с нужной группой, почему бы ей не воспользоваться?

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

s10.thumb.jpg.d0e26f9b3f338b1aa0459be6aeee6127.jpg

Но если ассерты пропустить, то даже загружается.

Не всё верно, полигоны ошибочные вижу.

Похоже, это дерево ошибочно грузится.

А в физдвижке красота прямо-таки. Правда, с вывернутыми нормалями. Но это только в экспорте. Внутри всё должно быть хорошо.

s11.thumb.jpg.6d724a534bf34673ca84e5a644519b69.jpg

10кк полигонов. Наверное, с bsp придётся разбираться. Там должна быть упрощенная геометрия. Тут слишком много.

Но с bsp такая проблема.

s12.thumb.jpg.ce82d53c1bda936a2a7a17a8ae9b24e7.jpg

Всё грузится нормально. Даже видно, что отсутствующие полигоны можно достроить, вершины есть.

Share this post


Link to post

Short link
Share on other sites

@Exemp1ee Приветствую. Меня нет в социальных сетях.

 

С разрушаемыми объектами сложности возникли. Не так-то просто их разрушить в физическом движке. В общем-то, догадывался, что нельзя удалять объекты при обновлениях физического мира, а только до или после. И на сайте нашёл подтверждение своим догадкам. Если бы это были динамические тела, было бы проще, в sdk даже пример разрушаемого объекта есть. А у меня это статика. И, как мне кажется, это разумно, ведь объекты не двигаются. Как и деревья до того момента, пока с ним не взаимодействуют, с которыми тоже надо что-то подобное сделать. Просто удалять один статический объект и ставить на его место новый у меня получилось, а разрушить секцию, в которую был удар - нет. Но удаление и создание нового объекта делал в обновлении состояния физического движка и это может быть причиной, почему не получается. Сложность ещё и в нахождении секции, которую надо разрушить при столкновении. То есть, появится должно на одну секцию меньше, чем есть в разрушаемом объекте.

И кстати, про деревья. Нашёл вьювер для них. Вот так выглядит коллизия.

tree1.thumb.jpg.a89b67e4e942a25666058f6195fab7b1.jpgtree2.thumb.jpg.b07a63386d8c7aab9eef26ec6fe831c3.jpgtree3.thumb.jpg.c2ba5567edbc6c2fc3f4230c977677d6.jpg

 

Ни веток, ни ствола. Простейшие геометрические фигуры. А потом удивляемся, почему куст дырявый и наоборот, наполовину выехал, а всё-равно скрыт.

Ранее писал про непонятное значение при проверке, будет ли объект на карте или нет (2 & map.BSMI.bsmi.visibility_masks). Это тип боя. Совсем забыл про это. ctf, domination и прочее.

 
- <type>
  <name>Capture the Flag</name> 
  <tagName>ctf</tagName> 
  <visibilityMask>1</visibilityMask> 
  </type>
- <type>
  <name>Domination</name> 
  <tagName>domination</tagName> 
  <visibilityMask>2</visibilityMask> 
  </type>
 

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...