Jump to content
Korean Random

Dragon armor

User
  • Content Count

    416
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by Dragon armor

  1. Не, на википедии в статье о Bullet, а потом в гугл полез. Мне теория нужна, поэтому не принципиально, какой движок и какая версия.
  2. @SkepticalFox На первое время можно использовать и клиентскую. К тому же, сам клиент её корректно использует, подсветка танка, например, это трассировка, подсветка возможности пробития при наведении на танк. Нашёл один тип модели коллизии, который, вроде бы, мой случай - это TriangleMesh, который в Newton, при беглом осмотре, не завезли. Или опять на потом оставить?
  3. @SkepticalFox Понятно, что строится упрощенная модель. Мне интересно, как в других движках обстоит дело. Например, башня каким образом будет у них загружена? Так же конвертируется в выпуклую модель или можно прямо в таком виде? А трассировку как делать? В финальной части должна быть точная физическая модель. Самому не приходилось сталкиваться с этим, поэтому не знаю, как должно быть. Надо почитать, ознакомиться.
  4. Коллизионная модель конвертируется физическим движком в выпуклую. Может так и должно быть? А дальше уже более точный ray-tracing? Кто работал с физическими движками, подскажите, как в них дело обстоит. А то, пока не поздно, может стоит выбрать другой.
  5. @SkepticalFox А физическому движку важна система координат? Там же только вектор гравитации задать надо правильно. Или это из-за алгоритма построения полигона? По часовой стрелке или против? Про Terra знаю, но то ли это язык такой, то ли стиль программирования, у меня не получается разобраться, что и где там. Сейчас смотрю свой проект по другой игре, не законченный и давно заброшенный. Там система координат, судя по комментариям, мной оставленным, xzy, при загрузке модели поворачивал её на 90 градусов по X. Но там был ландшафт в виде одной 3D модели. У меня успешно загружались модели, работала физика. Там не было упрощенной модели коллизии, загружал 3D модель в физический движок. И всё работало нормально. Только не помню одного момента - модель преобразовывалась в выпуклую или оставалась такой же, как загружал. Из-за этой проблемы создавал составную коллизию и присоединял остальные части к основной. Но вот про основную модель не помню. Правильно понимаю, что в этом фрагменте кода self.PrimitiveGroups.append({ 'startIndex' : startIndex, 'nPrimitives' : nPrimitives, 'startVertex' : startVertex, 'nVertices' : nVertices }) Для создания модели нужно только nPrimitives как смещение от начала в списке индексов. Коллизию шасси загрузить получилось. Если выводить один-к-одному в блендер, то так же на 90 градусов повёрнута. Наверное, надо повернуть, а потом проверить, как в клиенте будет. Но это попозже. Поворачивать надо на -90 и модель получается упрощенная.
  6. @Pavel3333 Нет, не забавно, утомительно. Пытался поворачивать модель на 90 градусов по X, Y - всё так же. Решил ещё посмотреть, как загружается коллизионная модель. Так же повёрнута на 90 градусов, но уже по другой оси и неправильно загружена. Но последнее поправимо. Слева - как загрузил физический движок, справа - как должно быть.
  7. Решил посмотреть, как геометрия загружена в физический движок. Ошибка не в алгоритме, тут так же расстояние между чанками в один шаг. А некоторая техника полностью провалилась под ландшафт из-за того, что неправильно загрузилась геометрия. Чанки почему-то получились ориентированы неправильно, каждый повёрнут на 90 градусов.
  8. Ты тут ни при чём, если ты о том, что это заимствовано у тебя. Мне не понятно, почему так получилось, должно же заканчиваться там, где начинается следующий чанк. Ошибка, наверное, в алгоритме. Кажется, что-то пошло не так.
  9. @Monstrofil Как у них всё сложно сделано. Но, похоже, мне не надо делать 3D модель. Смотрел примеры к физическому движку, там есть демосцены с ландшафтом. Так там так же загружается (генерируется в примере) карта высот и передаются размеры сетки. И функция есть соответствующая. Сейчас попробую сделать по аналогии, вдруг получится, а то этот ландшафт уже утомил меня. А дальше нужно будет статику загружать, ещё одна проблема.
  10. Ещё вопрос. Чанки как индексируются? Слева сверху будет первый? 00000000o - центральный, это понятно. А справа от него 00010000o? Слева ffff0000o? @RUS_TAHK Это про внутреннее устройство движка. Понятно, что если не разбирался с этим, то не сможешь ответить.
  11. Очень долго разбирался с ландшафтом, рисовал схемы, чтобы понять, как индексы полигонов сделать И всё-равно до конца не разобрался. Почему между ними получилась дыра шириной в шаг? Почти полтора миллиона полигонов на карту 1 км2. Интересно, физический движок не захлебнётся?
  12. @RUS_TAHK Создать подобное можно. Пострелять в болванчиков иногда интересно. Но пока что всё туманно. Слишком много нужно ещё сделать.
  13. @RUS_TAHK Сейчас рано что-либо писать о том, что будет. Нужно сделать минимально работающую систему, а потом уже думать, что делать дальше. Наобещать можно всего, в итоге ничего не сделать, поэтому с описанием будущих возможностей сервера повременю. И такой вопрос - а логику для ботов кто будет создавать? У меня, например, нет опыта создания ботов.
  14. @SkepticalFox Не могу другие IDE для сишки, кроме как VS. Привычка. Пробовал QtCreator, не то. По удобству с VS не сравнится. Можно, конечно, ещё что-то попробовать. @Monstrofil Первые биты, наверное, количество свойств, а не номер. Дальше номер идёт. Это AreaDestructibles. Хотя, не помню, надо будет разобраться, когда дойду до этого. Кстати, ты не знаешь, что за сообщение avatarUpdatePlayerDetailed? 6 float, очевидно, позиция и направление. Но меняются очень редко. После forcedPosition становятся равны ему. Ещё мне нужно со временем разобраться. Почему то, когда раунд начинается, время не идёт. Ошибка была из-за того, что в PyFloat_AsDouble попадал вектор, а не значение этого вектора, вызывалась функция PyErr_SetString(PyExc_TypeError, "a float is required"). А т.к. у меня нет проверок корректности преобразования pyObject к float, то первая же проверка PyErr_Occurred вызывала исключение, естественно, не в месте возникновения ошибки. Поэтому и указывало на странные выражения типа print.
  15. @spoter Туда уже готовое попадает. Это данные от сервера, ещё не распарсенные.
  16. @SkepticalFox Ясно. Позже, если что-то будет. @spoter Ошибка та же самая невнятная, только обрамление добавилось в виде [START:]/[END:] Бывают дни, когда всё не получается, как надо. Видимо, у меня сегодня такой день. Специально проверил, что путь не None, по-отдельности всё загружается, вместе тоже самое объединил, но нет, не загружу, чтобы просто поиздеваться над тобой, твой интерпретатор.
  17. Или значения свойств тоже запакованы? А удалять сообщения нельзя?
  18. Вот например. a00127 Это для дерева или типа того. 101000000000000100100111 Первый бит - упаковано. 01 - номер свойства. Тут 2 байта должно быть, индекс дерева. Остаётся 5 бит.
  19. @Monstrofil Там не всё так "просто". Первый бит вроде как флаг - упаковано или нет, что меня радует, мне-то байты экономить не надо. Ибо эти упакованные значения утомили. И если распаковать ещё можно, то написать алгоритм упаковки у меня выходит плохо. По памяти пишу, без проверки. Наверно, 3 бита, а не байта. Там завязано на количество свойств в энтити (bitsRequires видимо у тебя), а размер определяется исходя из максимального количества бит, которым можно задать индекс свойства. Для 4 свойств требуется 3 бита. Но у меня всё-равно не получалось, не хватало бита для количества свойств, когда пытался прикинуть на глазок. Потом попытаюсь осознать твой алгоритм.
  20. Оказалось, что не expected, а request. print 'Load_Collision {}'.format(path) TypeError: a float is required Очень информативное сообщение. Опять вылезло. Ни номера строки, ни типа ошибки. Явно не из-за print'а. Меня сегодня питон решил добить? @StranikS_Scan Ясно. Были смутные подозрения, но файл коллижена на клиенте существует и его даже можно загрузить в Blender. @spoter Как всё сложно. Эту статью видел, но только ознакомился в своё время. Для меня мимо. Пока в блокноте продолжу print'ами отлаживать.
  21. Хотя бы попадание в орудие. Ведь в xml файле есть секция hitTester, в collision_client есть соответствующая модель. У меня он есть. В нём так и не разобрался, как добавить свои модули, которые на C написаны. Поэтому даже до отладки дело не дошло. Гуглил что-то невразумительное, но ничего не нашёл. Не знаю, по каким ключевым словам вести поиск.
  22. @Monstrofil С setNested_PROPERTY нет, а с setSlice_PROPERTY в сообщении sliceEntityProperty, но так и не смог разобраться, как упаковываются значения. Точно! Подняли сервер специально для меня и присоединились к локальному серверу, минуя фаервол и NAT провайдера. В том то и дело, что не пропали за пределом круга отрисовки. Позже проверю. Тут уже графический движок отвечает за это. Местность видно далеко за пределами круга отрисовки, модели тоже должно бы рисовать так же далеко. Что-то дело не идёт совсем. Сегодня несколько часов промучился с питоном и его невнятным логом "float expected" (или что-то подобное). Уже везде расставил print, чтобы найти место, где ошибка. Не печатает. Всё время показывает на "print 'Load_Collision {}'.format(path)" с "float expected". Когда уже по-отдельности функции разделил, вдруг заработало. Что с этим питоном не так? Почему конструкция Func1(Func2(some_param)) выдавала такую дичь? Когда разделил, сразу же заработали print во всех расставленных местах. Оказалось, что d.turrets[0][0].guns[0].hitTester == None. Поставил assert в хуке на загрузку hitTester. Не срабатывает, т.е. всё загружается, но в guns всё равно hitTester == None. В файле G98_Waffentrager_E100_P.xml параметр hitTester есть, путь валиден, файл существует. Что ему надо? Почему не загружается? Или находится в другом месте? d получил из vehicles.VehicleDescr(compactDescr = '\x11\xbe\xe0\x00\x90\x00\xcd\x00"\x00\xc2\x00\x80\x00\x00'). Для всех остальных компонентов hitTester есть, для орудия нет. Откуда его брать? Как-нибудь отладчик для питона можно прикрутить? Чтобы VisualStudio отдельно, отладчик питона отдельно. Надоело print'ами смотреть, что не так.
  23. Да, именно это. GIL. Чтобы в разных потоках был свой собственный контекст питона. На хабре в статье очень просто было, повторял по шагам, а в итоге не получилось. Инициализация проходила нормально, но при вызове PyGILState_Ensure() происходила блокировка, которая не снималась. В итоге в своё время отбросил эту идею. И сейчас это не очень и нужно. Ну да.
  24. Как всё сложно. Но логично, что только z хранится в картинке. Позже разберусь. Потому что сейчас столкнулся с такой вещью, что мне надо бы два независимых экземпляра питона в одной программе. Есть константа component, которая может быть 'sell' (когда в бою) или 'base' (когда в ангаре). И грузится, в зависимости от значения константы, немного разная информация из xml. Сейчас попытался разобраться с моделью коллизии, но путь до неё не грузится при парсинге xml, когда component == 'base'. Сейчас пока что поставлю хук на _readHitTester, чтобы грузилась клиентская коллизия. А может и не надо будет, оставлю так, как есть. Проверил, хук работает, путь до коллизии есть. Оставлю до лучших времён так. Но узнать, как сделать независимые экземпляры в одной программе было бы неплохо. Пытался по статье на хабре сделать, но не получилось, было что-от типа deadlock. Видимо так.
  25. Где? И что в нём обсуждать сверх того, что в теме? Как загрузить ландшафт? На данный момент не интересует статичная геометрия, только сам ландшафт. Что у меня есть - это загруженный terrain2\heights из .cdata_processed. Получил массив чисел -28.190001 -28.200001 -28.200001 -28.230001 -28.240002 -28.250002 -28.250002 и так далее Они как группируются? 3 числа - вектор, 3 вектора - полигон? Или как-то по-другому? Смотрел в исходниках blender-tools/wot_maps_viewer, но там так мудрёно, что ничего не понял. Разработки, как таковой, пока что и нет. Когда будет уже что-то, чем можно поделиться, тогда можно будет делать. Карта, если что, "spaces/28_desert", файл "00000000o.cdata_processed". И как мне помнится, буква в конце имени файла ("o") что-то означает. Или нет?
×
×
  • Create New...