Как открыть matrix3x4_t?

tonline_kms65

Участник
Сообщения
65
Реакции
13
Нескромный вопрос. Матрица я так понимаю, типа кватерниона, тебе нужна для отслеживания расположения костей скелета?
Сорри если не в тему. Не могу представить просто для чего еще ее можно использовать.
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
Нескромный вопрос. Матрица я так понимаю, типа кватерниона, тебе нужна для отслеживания расположения костей скелета?
Сорри если не в тему. Не могу представить просто для чего еще ее можно использовать.
Ты прав, она нужна для отслеживания позиции и угла костей и аттачей
 

tonline_kms65

Участник
Сообщения
65
Реакции
13
У меня напрашивается интересная идея.
Я так понял из sourcepawn мы не можем получить доступ к координатам костей скелета модели. Вернее сказать не можем прочитать эти данные из .mdl файлов. Но слава богу это скелетная анимация, и у нас есть к примеру исходники 3d модели, в формате .smd который из sourcepawn прочитать можно запросто.

version 1
nodes
0 "Radar" -1
1 "ValveBiped.Bip01_Pelvis" -1
2 "Bone003" 1
3 "bone_radar" 2
4 "Bone_camera" 1
5 "Bone004" 1
6 "Bone005" 1
7 "Cylinder005" 6
8 "Cylinder006" 6
9 "Cylinder007" 6
10 "Bone006" 1
11 "Bace" -1
12 "Camera" -1
13 "Cylinder008" -1
14 "Sphere001" -1
15 "Sphere002" -1
16 "Sphere002" -1
17 "Sphere003" -1
18 "Cylinder009" -1
19 "Cylinder010" -1
20 "Cylinder011" -1
end
skeleton
time 0 // позиции костей
0 -0.003742 3.138247 0.000000 0.000000 -0.000000 0.000000 // 0 кость Radar
1 -0.000000 0.000000 0.000000 1.570739 -1.569761 -1.570739 // 1 кость ValveBiped.Bip01_Pelvis
2 13.899904 0.000002 -0.000000 -1.539465 1.488065 -1.542466 // и т.д.
3 2.977542 -0.219762 0.148088 -1.975723 -1.570796 0.000000
4 -2.513843 -0.002592 -0.000000 3.141590 -0.001029 0.001031
5 9.714636 -11.109823 19.184322 -0.000003 0.000001 0.001031
6 9.714647 -11.136524 -19.085056 0.000000 -0.000000 0.001031
7 -0.829159 0.000001 0.000002 0.000000 1.570796 0.000000
8 -0.829159 0.000001 0.000002 0.000000 1.570796 0.000000
9 -0.829159 0.000001 0.000002 0.000000 1.570796 0.000000
10 9.680388 22.087057 0.036049 -0.000000 0.000001 0.001032
11 -0.003742 3.138247 0.000000 0.000000 -0.000000 0.000000
12 2.016657 3.138247 0.000000 0.000000 -0.000000 0.000000
13 -0.036058 22.077055 9.703162 0.000000 -0.000002 2.035324
14 -0.073887 -8.153861 9.011652 0.000000 -0.000000 0.000000
15 0.060070 2.215511 14.945037 0.380288 0.008463 -0.106159
16 -7.094942 4.074885 9.149241 0.000000 0.000000 -2.084810
17 7.046998 4.087891 9.149241 0.000000 -0.000000 2.124358
18 4.750763 2.338308 6.438481 0.000000 -0.174533 0.343789
19 -4.470937 2.793533 6.438481 -0.000000 -0.174533 2.404598
20 -0.075822 -5.362833 6.438481 0.000000 -0.174533 -1.745005
end
triangles //меши (треугольники)
body.vtf
0 2.878032 -3.274229 18.896408 -0.394747 -0.918774 -0.005406 0.723600 0.996100 1 3 1.000000
0 2.867212 -3.277205 20.198524 -0.394734 -0.918780 -0.005380 0.723600 0.945800 1 3 1.000000
0 0.797518 -2.387930 20.185507 -0.394760 -0.918768 -0.005432 0.634800 0.945800 1 3 1.000000
body.vtf
............................
.......................
...................

Идем дальше. Это пример модели статик. Проще без анимации (reference).
Прочитав и получив данные этой модели мы так же можем получить и файлы анимации этой модели
version 1
nodes
0 "Radar" -1
1 "ValveBiped.Bip01_Pelvis" -1
2 "Bone003" 1
3 "bone_radar" 2
4 "Bone_camera" 1
5 "Bone004" 1
6 "Bone005" 1
7 "Cylinder005" 6
8 "Cylinder006" 6
9 "Cylinder007" 6
10 "Bone006" 1
11 "Bace" -1
12 "Camera" -1
13 "Cylinder008" -1
end
skeleton
time 0 // дальше ключи анимации и положение костей в этом ключе(фрейм) здесь 0 фрейм
0 -0.003742 3.138247 0.000000 0.000000 -0.000000 0.000000 // 0 кость и её координаты
1 -0.000000 0.000000 0.000000 1.570739 -1.569761 -1.570739 // 1 кость и её координаты
2 13.899904 0.000002 -0.000000 -1.539465 1.488065 -1.542466 // и т.д.
3 2.977542 -0.219762 0.148088 -1.975723 -1.570796 0.000000
4 -2.513843 -0.002592 -0.000000 3.141590 -0.001029 0.001031
5 9.714636 -11.109823 19.184322 -0.000003 0.000001 0.001031
6 9.714647 -11.136524 -19.085056 0.000000 -0.000000 0.001031
7 -0.829159 0.000001 0.000002 0.000000 1.570796 0.000000
8 -0.829159 0.000001 0.000002 0.000000 1.570796 0.000000
9 -0.829159 0.000001 0.000002 0.000000 1.570796 0.000000
10 9.680388 22.087057 0.036049 -0.000000 0.000001 0.001032
11 -0.003742 3.138247 0.000000 0.000000 -0.000000 0.000000
12 2.016657 3.138247 0.000000 0.000000 -0.000000 0.000000
13 -0.036058 22.077055 9.703162 0.000000 -0.000002 2.035324
time 1
0 -0.003742 3.138247 0.000000 0.000000 -0.000000 0.000000
1 -0.008716 -0.000000 0.046076 1.403822 -1.566755 -1.399160
2 13.899904 0.000002 0.000000 -1.539465 1.488065 -1.542466
3 2.977542 -0.219762 0.148087 -2.289882 -1.570796 0.000000
4 -2.513843 -0.002592 -0.000000 -3.114226 -0.001030 0.001031
5 9.714634 -11.109821 19.184322 -1.256675 0.000001 0.001032
6 9.714646 -11.136522 -19.085056 -1.256567 -0.000000 0.001032
7 -0.829159 0.000002 0.000004 0.000000 1.570796 0.000000
8 -0.829159 0.000002 0.000004 0.000000 1.570796 0.000000
9 -0.829159 0.000002 0.000004 0.000000 1.570796 0.000000
10 9.680387 22.087055 0.036049 -1.256635 0.000001 0.001032
11 -0.003742 3.138247 0.000000 0.000000 -0.000000 0.000000
12 2.016657 3.138247 0.000000 0.000000 -0.000000 0.000000
13 -0.036058 22.077055 9.703162 0.000000 -0.000002 2.035324
time 2
0 -0.003742 3.138247 0.000000 0.000000 -0.000000 0.000000

Это все естественно абсолютные координаты. Все координаты привязаны к координатам нулевой кости модели. Родителя. Координаты родителя естественно = 0.0 (в правильно сделанной модели)
Т.е. это и есть abc матрица.
Её нужно вычислять уже относительно матрицы "мира"

Приходим к выводу. Прочитать 3d модель даже с анимацией из sourcepawn возможно.

Это я просто однажды пробовал написать плагин Робот. Робот получился. Но не получилось того что я хотел.
Пока это просто мои мысли. Я этим вплотную не занимался. Но думаю при желании есть возможность отслеживать и соответственно управлять позициями костей. Геморрой конечно обеспечен. Конечно проще было бы просто получить доступ к матрицам самого движка. Но к сожалению это не представляется возможным.
Что еще плохо - нужны исходники модели. Либо нужно компилировать модель в какой то свой формат, для дальнейшего использования, опять же при наличии исходников.
 
Последнее редактирование:

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
@tonline_kms65, это просто чушь. Таким путём пойдёт разве что умственно-отсталый. К тому же сорспавн поддерживает нативно сишные функции работы с файлами. То-есть, можно распарсить любой бинарный файл.
 

tonline_kms65

Участник
Сообщения
65
Реакции
13
@gibs,
Ну-ка, ну-ка, примерчик пожалуйста своих мыслей. Никто в мире не придумал, а ты оказывается уже придумал и молчал.
Каким - то чудом ты прочитаешь бинарный файл (не пойму правда что там можно будет понять), а как его использовать? Ты меня прям заинтриговал.
нативно сишные, распарсить
писать умные фразы легко. А вот практически использовать - интересно было бы на тебя посмотреть.
Мой вариант будет работать 100% Да геморроя много, но работать будет. Координаты вершин всех костей, причем с изменениями во времени есть. Остается отследить их изменение относительно координат карты. Я это все вижу визуально.
А вот твой вариант я что то слабо себе представляю. Даже вообще не представляю. Если ты их распарсиш, вытащишь кракозябли, а дальше что? Ты сам просто не поймешь что там за каракули и что с ними делать. Дешифратор нужен.

4944535430000000596D30654C617365725F5475727265745C44726F6E652E6D646C000000000000000000000000000000000000000000000000000000000000000000000000000000000000902000000000000000000000000000007A48AF400094BD3C220B2641AF1F9DC17765DEC1BF0421C0A45EF6414DB6DD41FF7CBD41000000000000000000000000000000000000000000000000000000000700000098020000000000008008000001000000600B0000040000000C0D00000400000074140000000000000000000005000000F019000001000000301B00000500000003000000341B000001000000F0170000080000008008000000000000F0170000F0170000000000009418000000000000941800000000000094180000000000009418000000000000941800000000000094180000641F0000541B00000000000000000000941800000000F0410100000000000000F0190000000000004C1F000000000000F019000000000000040D00000000000000000000000000000000000000000000941800000000000000000000980100000000000000000000541B00000000000000000000BC190000B51D00000000000000000000000000000000000000

Вообще человек просил помощи. Ты почитай свои ответы, что ты ему советуешь. Нет дельных предложений - не отвечай, а умничать то все могут. Без обид. Если бы от тебя я увидел бы хоть одно предложение для него, я бы сейчас просто промолчал.
Вообще хорошо бы у Балопана узнать, почему этот момент они упустили. Сколько возможностей бы появилось, именно в плане анимации.
 
Последнее редактирование:

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
@tonline_kms65, паренёк тут расписал свои "находки". У него есть 3-й вариант, в котором типы QAngle и Vector. Это типы, которые поддерживаются сдк тулс для сорспавна. И почему-то парень оставил этот вариант на самый худой случай.
Ты пытаешься открыть бинарный файл как текстовый и называешь результат крякозяблями. Это просто говорит о минимальном наборе знаний, которыми ты обладаешь.
Бинарные файлы имеют свой формат. Формат mdl файлов хорошо описан в сдк. Некоторая инфа имеется на вики.
Но всё то, что обсуждается в этой теме попросту не нужно. Берёте проп, цепляете его к атачменту через SetParentAttachment и получаете его abs значения.
И по теме, парень получил ответ как открыть матрицу ещё в первых постах.
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
А ведь это еще обсуждалось на WS
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
@inklesspen, там парень неправильно написал создание вызова. Vector и QAngle - это параметры ByRef, а он зачем-то вызывает PrepSDKCall_SetReturnInfo, хотя возвращаемое значение булевое. В итоге оно и не работало.
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
Кстати есть расширение, позволяющее считывать матрицу и выдавать вектор и угол. Сделан специально от http://hlmod.ru/members/komashchenko.49508/
А вот пример моего плагина

Автор говорил что может не работать
Функцию разделил на 2 команды и добавил глобальную переменную, дабы, если что-то пошло не так, знать, что именно.
Советую заглянуть исходник, если у вас Windows

sm_getattachment
потом
sm_getattachment2

Первая - получение матрицы, вызов написан мною
Вторая - Извлечение из матрицы данных, вызывается через то расширение
Конечно, врядли хорошая идея пилить отдельное расширение, но уже готово и надо бы протестировать
 

Вложения

  • Matrix.zip
    226.2 КБ · Просмотры: 13
  • linux_GetAttachmentPos.sp
    1 КБ · Просмотры: 12
  • linux_GetAttachmentPos.smx
    4.4 КБ · Просмотры: 2

tonline_kms65

Участник
Сообщения
65
Реакции
13
@tonline_kms65,
Но всё то, что обсуждается в этой теме попросту не нужно. Берёте проп, цепляете его к атачменту через SetParentAttachment и получаете его abs значения.

Это то, о чем я и говорил. Начитан, но практики мало. Теория без практики ничто.
Вот смотри. Прицепить проп к атачменту. До он цепляется. Да он следует за родителем. Есть одно огромное НО.
Не отслеживаются его m_vecOrigin (т.е. текущие координаты) можно отследить m_vecAbsOrigin, но это абсолютные координаты, т.е. то что я приводил в примере. Практически это и есть матрица. И для того что бы получить правильные текущие координаты, нужно abs матрицу умножать на координаты положения нулевой кости в "мире". И это все производить постоянно, при каждом фрейме анимации.
Вот как то так. Как это практически выглядит я вижу, как это тебе объяснить не знаю. Если бы все было так просто как ты себе представляешь, вопросов поверь не было бы ни у кого. Никто в мире пока эту проблему не решил.
Можно сделать модуль на DirectX, там есть все необходимое для этого. Останется слепить с SourceSDK.
Но сказать честно, целесообразности в этом не вижу тогда вообще.

Идем дальше:
Бинарные файлы имеют свой формат. Формат mdl файлов хорошо описан в сдк. Некоторая инфа имеется на вики.
Я тебя попросил - дай примерчик использования. Хотя бы на пальцах. Я плохо представляю, каким образом это можно использовать.
--- Добавлено позже ---
@inklesspen,

Это для линукса, для винды есть? Говоришь исходник есть?
Матрица 3х4 по ходу это и есть кватернион. 4координата для вращения матрицы.
 
Последнее редактирование:

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
Это для линукса, для винды есть? Говоришь исходник есть?
ой, я даже не заметил что для винды нету расширения там :)
Но функция считывания матрицы взята от сюда: [RELEASE] UTILS Extension - AlliedModders
Там-же есть и функция для получения позиции аттачи\кости
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
@tonline_kms65, вот элементарный пример работы с бинарным файлом ссылка
Но всё же интересно, зачем же вам позиции атачмента?
 

tonline_kms65

Участник
Сообщения
65
Реакции
13
@gibs, @inklesspen,

Поработай с анимацией, и сразу поймешь. Без определения положения костей (даже не костей а аттачментов) тяжело. Приходится извращаться по всякому.
Пример. Делал я робота. Он стреляет примерно на 10 фрейме(кадре). До выстрела проделывает кучу манипуляций, перешагивает, загибается ит.д. Короче ко времени выстрела положение аттача для стрельбы уходит от abs координат на херовое расстояние, а это расстояние не отслеживается. И получается выстрел производится из пустого места, из координат начала анимации, грубо нулевого фрейма( т.е. из ABS координат).
По идее можно прицепить на место начала выстрела невидимую ENT, и вести какие то действия от её имени (опять же, координат этой ENT небудет).

Так я сделал для своего плагина Mashine_Gun (пулемет) Трассеры должны вылетать из дула. А попробуй задать начало координат на модели которая с анимацией и физическая. Там анимация проигрывается другим методом. Уже не только фреймами, а еще и программно. Короче головняка было валом. Остановился пока на таком. Прилепил на ствол ENT, сделал её невидимой, пришлось изобретать какй-то головняк где трассер берет начало не от координат атача ENT, а от имени атача ENT, потому что координаты там вообще не получить. Да еще и ствол в момент выстрела выпрямить соосно с трассером. Трассеры я делал анимированной текстурой.

Всё это не есть хорошо. Ненадежно. Хотелось бы иметь доступ непосредственно к скелету. А по возможности и управлять этим скелетом независимо уже от его изначально забитой анимации.
Я почему и говорю - не пойму почему этот момент упущен в SDK. Возможностей появилась бы просто масса.
--- Добавлено позже ---

ВАХ. Ну всё поциков однозначно доканало это упущение. Сейчас посмотрю что они там намутили.
Japan - как обычно. Кто еще. Так это модуль для TF2. На CSS не идет.
--- Добавлено позже ---
Что то какая то непонятность. У меня сейчас Visual Studio 2015, раньше стоял 2008.
На 2008 проблем со сборкой и компиляцией не было. А сейчас не могу собрать. Вернее собрать собрал, но ошибок валом.
error.jpg

hl2sdk-css. Что еще за головняк? Кто сталкивался - отпишитесь пожалуйста, а то головняк на месяц обеспечен.
 
Последнее редактирование:
Сверху Снизу