Создание трехмерной модели руки человека на C ++ или Python

Я разрабатываю свою магистерскую диссертацию, в которой отслеживаю человеческие суставы для оценки контроля осанки. Итак, первый шаг проекта возвращает файл csv (этот формат может быть изменен) с координатами каждого сустава по времени.

Чтобы отладить этот первый шаг и будущие шаги, которые я буду развивать, я хочу создать трехмерную модель руки человека (движения, которые я отслеживаю, в основном от руки), поэтому я посмотрю, содержат ли данные csv, содержащие суставы координаты в порядке (в идеале, в версии 3D руки я бы увидел грязную версию движения, которое я изначально отслеживал).

Как правильно и быстро разработать такую ​​модель? Я имею в виду, не поймите меня неправильно, я хочу что-то, что можно было бы разработать быстро, с цилиндрами как секциями рук и сферами как суставами, которых более чем достаточно. Я не хочу тратить на это слишком много времени, поскольку в конце это не является частью самого проекта.

Обратите внимание, что я планирую перемещать руку, используя кватернионы или углы Эйлера, но не уверен, что это меняет что-нибудь.

Я видел, как это делается на C ++ с использованием OpenGL, но пока кажется, что это требует слишком много времени, которого у меня на самом деле нет.

Заранее спасибо, и я надеюсь, что есть способ сделать это!


person Alberto Perdomo    schedule 23.02.2021    source источник
comment
Забудьте про модель руки. Просто нарисуйте соединения между стыками в виде линий.   -  person user253751    schedule 23.02.2021
comment
Может быть, Stack Overflow Chat - лучшее место для обсуждения вашего проекта и проблем?   -  person Dorian Turba    schedule 23.02.2021
comment
Когда вы рисуете линии, он должен выглядеть как фигурка.   -  person user253751    schedule 23.02.2021


Ответы (1)


Однако вообще не кодирую на Python ...

Я бы выбрал формат файла BVH вместо CSV. Это также просто текстовый файл, но структурированный, и есть гигабайты бесплатных баз данных BVH для загрузки, что означает, что у вас будут готовы реальные данные о положении, не дожидаясь, пока HW и прочее начнут работать, что делает отладку и кодирование намного проще и быстрее. Также вы можете добавить возможность сохранения в файл BVH, чтобы вывод вашего приложения можно было просматривать и / или импортировать в другое ПО без проблем.

Рендеринг Arm с использованием примитивов, как вы описали, довольно прост с прямой кинематикой. Это не так уж и много работы на C ++. Я проделал это со своими учениками во время одного урока, на самом деле это просто цикл for с несколькими glPushMatrix/glPopMatrix в старом API). Таким образом, каждая часть будет иметь собственное локальное преобразование (углы Эйлера и размер), которые будут применяться к родителям трансформируется. Таким образом, у вас просто будет цикл рендеринга, идущий от корневой кости, применить его рендеринг с преобразованием и повторить для следующей кости ... И Cylinder, и Sphere mesh можно повторно использовать, используя масштабирование для установки разных размеров, поэтому нет необходимости в нескольких мешах. Также посмотрите на это:

Также может потребоваться преобразование углов Эйлера между разными порядками:

person Spektre    schedule 23.02.2021
comment
По моему опыту (в прошлом году), погрузчик BVH был очень прост в реализации - работа за несколько дней. Недостаток геометрии я компенсировал синтетическими костями (соответственно масштабированными октаэдрами), чтобы было что-то видимое для проверки глазами. - person Scheff's Cat; 23.02.2021
comment
@Scheff yep BVH прост в реализации ... однако, если вы используете сложную сетку для BVH, тогда это нетривиально, потому что вам нужно выровнять сетку по исходной позе BVH, а также по самой иерархии ... к счастью, для OP это не так ... - person Spektre; 24.02.2021
comment
@Spektre спасибо за подробный ответ. Я думаю, что я обязательно выберу формат файла BVH, и все другие соображения также принимаются во внимание. Я обнаружил, что с помощью OpenGL было довольно сложно получить красивую модель, но в любом случае это для меня, поэтому она не обязательно должна хорошо выглядеть. - person Alberto Perdomo; 24.02.2021
comment
@AlbertoPerdomo обычно включает свет (включение GL_LIGHTING, а также GL_LIGHT0, который удобно уже настроен по умолчанию) + передача также векторов нормалей вашим сеткам значительно улучшит внешний вид (даже без текстур) - person Spektre; 24.02.2021