Dragon armor 67 #479039 Posted March 11, 2020 @SkepticalFox Там один флаг. Проверка только на &1. Объект видимый, это разрушаемое по секциям здание. Но на момент создания карты должно быть невидимо. 3 минуты назад, SkepticalFox сказал: я про bsmo_models_id в BSMI Вот он содержит все используемые объекты. И разрушаемые, и неразрушаемые. Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #479041 Posted March 11, 2020 (edited) @Dragon armor а, ну ок Мы не юзаем в nuTerra chunkmodels Edited March 11, 2020 by SkepticalFox Quote Share this post Link to post Short link Share on other sites
Dragon armor 67 #479042 Posted March 11, 2020 В таблице BSMI.8_12 индексы 0 и 1 - это новые объекты, которые появятся в замен разрушенного. 4 объекта соответствуют трём разрушаемым секциям и один - это основание. 1 минуту назад, SkepticalFox сказал: Мы не юзаем в nuTerra chunkmodels Просто меня смутило твоё описание разрушаемых объектов. На всякий случай, решил спросить. Вдруг сам ошибся. Тогда всё норм. @SkepticalFox Тогда встречный вопрос. А как обходите вывод разрушамых объектов? Они же мешаться будут. Если всё подряд из bsmo_models_id выводить. Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #479043 Posted March 11, 2020 Странно, зачем им дублировать эту инфу В bsmo есть же уже ... Все, до меня дошло, это default state инстанса Quote Share this post Link to post Short link Share on other sites
Dragon armor 67 #479044 Posted March 11, 2020 10 минут назад, SkepticalFox сказал: default state инстанса Требуется расшифровка. Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #479045 Posted March 11, 2020 4 minutes ago, Dragon armor said: Требуется расшифровка. ты меня окончаткльно запутал 28 minutes ago, Dragon armor said: А как обходите вывод разрушамых объектов? Они же мешаться будут. Если всё подряд из bsmo_models_id выводить. я же написал, там только неразрушенные - я не прав? Quote Share this post Link to post Short link Share on other sites
Dragon armor 67 #479046 Posted March 11, 2020 1 минуту назад, SkepticalFox сказал: я же написал, там только неразрушенные - я не прав? Если выводить всё подряд из bsmo_models_id, то будут и разрушаемые объекты, и неразрушаемые. Одни накладываются на другие и даже не заметно, что их больше одного. Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #479047 Posted March 11, 2020 (edited) @Dragon armor значит неправильно выводишь =) там геометрия разрушенного объекта в отдельном render блоке, по идее ты лишние грузишь bsmo.models_loddings => bsmo.lod_renders => bsmo.renders эта цепочка должна быть правильно реализована у нас в nuTerra нет разрушенных объектов (после того как я пофиксил обработку bsmo.renders) до фикса под трубами были разрушенные трубы, к примеру Edited March 11, 2020 by SkepticalFox Quote Share this post Link to post Short link Share on other sites
Dragon armor 67 #479048 Posted March 11, 2020 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. Второй - инвертирование условия. Два объекта (неразрушаемые изначально) исчезли. Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #479050 Posted March 11, 2020 (edited) 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 March 11, 2020 by SkepticalFox Quote Share this post Link to post Short link Share on other sites
Dragon armor 67 #479051 Posted March 11, 2020 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. Подозреваю, мы об одном и том же говорим. Если у тебя всё загружается правильно и у меня правильно. Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #479053 Posted March 11, 2020 1 minute ago, Dragon armor said: А там указывается группа примитивов. где там? verts_name_fnv указывает на секцию с вершинами, prims_name_fnv указывает на секцию с треугольниками, на группы примитивов указывет "primitive_index" его используешь? Quote Share this post Link to post Short link Share on other sites
Dragon armor 67 #479054 Posted March 11, 2020 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/ и название нужных секций есть. Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #479055 Posted March 11, 2020 2 minutes ago, Dragon armor said: У меня даже ассерт есть так, и что? а больше кода где используется primitive_index ?) Quote Share this post Link to post Short link Share on other sites
Dragon armor 67 #479057 Posted March 11, 2020 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; Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #479058 Posted March 11, 2020 (edited) по логике тут вроде у тебя все правильно <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 March 11, 2020 by SkepticalFox Quote Share this post Link to post Short link Share on other sites
Dragon armor 67 #479059 Posted March 11, 2020 @SkepticalFox Только до этого файла не добраться из space.bin. Загрузка у меня только из того, что привёл. Нужная группа, возможно, не совсем правильно у меня выбирается. Но раз есть строка с нужной группой, почему бы ей не воспользоваться? Надоели ассерты в физическом движке. Интеграция, чувствую, будет проблемной. То геометрия загружаемая не нравится, то сейчас на матрице для дерева падает. Но если ассерты пропустить, то даже загружается. Не всё верно, полигоны ошибочные вижу. Похоже, это дерево ошибочно грузится. А в физдвижке красота прямо-таки. Правда, с вывернутыми нормалями. Но это только в экспорте. Внутри всё должно быть хорошо. 10кк полигонов. Наверное, с bsp придётся разбираться. Там должна быть упрощенная геометрия. Тут слишком много. Но с bsp такая проблема. Всё грузится нормально. Даже видно, что отсутствующие полигоны можно достроить, вершины есть. Quote Share this post Link to post Short link Share on other sites
Exemp1ee 0 #480163 Posted March 31, 2020 Привет хочу с тобой связаться если не сложно напиши мне в вк https://vk.com/exemp1ee Quote Share this post Link to post Short link Share on other sites
Dragon armor 67 #480188 Posted March 31, 2020 @Exemp1ee Приветствую. Меня нет в социальных сетях. С разрушаемыми объектами сложности возникли. Не так-то просто их разрушить в физическом движке. В общем-то, догадывался, что нельзя удалять объекты при обновлениях физического мира, а только до или после. И на сайте нашёл подтверждение своим догадкам. Если бы это были динамические тела, было бы проще, в sdk даже пример разрушаемого объекта есть. А у меня это статика. И, как мне кажется, это разумно, ведь объекты не двигаются. Как и деревья до того момента, пока с ним не взаимодействуют, с которыми тоже надо что-то подобное сделать. Просто удалять один статический объект и ставить на его место новый у меня получилось, а разрушить секцию, в которую был удар - нет. Но удаление и создание нового объекта делал в обновлении состояния физического движка и это может быть причиной, почему не получается. Сложность ещё и в нахождении секции, которую надо разрушить при столкновении. То есть, появится должно на одну секцию меньше, чем есть в разрушаемом объекте. И кстати, про деревья. Нашёл вьювер для них. Вот так выглядит коллизия. Ни веток, ни ствола. Простейшие геометрические фигуры. А потом удивляемся, почему куст дырявый и наоборот, наполовину выехал, а всё-равно скрыт. Ранее писал про непонятное значение при проверке, будет ли объект на карте или нет (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> Quote Share this post Link to post Short link Share on other sites
mixailwot 0 #481567 Posted April 28, 2020 посмотри ещё вот тут https://github.com/dpoluyanov/jts-tanks Quote Share this post Link to post Short link Share on other sites