Понимание 3D-моделей и узлов в Libgdx

1

Я пытаюсь лучше понять Model и их иерархию Node в Libgdx. Насколько я понял, Model состоит из многих дочерних Node, которые могут содержать и другой Node. Каждый узел имеет Vector3 translation описывающую ее положение, Vector3 scale, описывающий его масштаб и Quaternion rotation описывающий его вращение, по отношению к родительскому Node или Model. Matrix4 gloabalTransform описывает то же самое, но относительно мира, в котором они находятся.

Теперь, если я думаю о таких играх, как Garrys Mod, где Model Player может динамически перемещать части модели (например, если они лежат на краю после того, как они умерли, их верхняя часть тела может свисать с стены), я могу только думать о, что они изменяют единый Node во время выполнения в исходном коде. Теперь мои вопросы:

  1. Правильно ли мое предположение?
  2. У меня есть возможность создать Node в Blender (скажем, 1 Node - левая нижняя нога, 1 Node - левая верхняя нога...) и получить и изменить их во время выполнения, используя (например) modelInstance.getNode("leftLowerLeg").translation.set(Vector3 position), или они созданы и называются автоматически, в зависимости от формы, лица...?

Большое спасибо!

Теги:
libgdx
animation
3d

2 ответа

2
Лучший ответ

Глядя на что это похоже, что понятие узла является то, что графа сцены. Ваша модель может быть изготовлена из деталей (MeshPart), и каждая отдельная часть является дочерним узлом узла. Наличие отдельного узла означает, что вы можете применять к нему преобразования, тем самым перемещая его независимо от любой другой части модели. Таким образом, кажется, что вы хотите построить свою модель в виде отдельных частей и загрузить эти части в иерархию узлов в соответствии с вашими потребностями. Сохраните ссылку на узел, который вы хотите переместить независимо, и примените преобразования.

Узел может "содержать" MeshPart (т.е. MeshPart является дочерним узлом узла). Узлы могут содержать другие узлы. взгляните на википедию для терминологии графа сцены. Повесьте в документах для модели: "Модель представляет собой 3D-активы. Она хранит иерархию узлов. У узла есть преобразование и, необязательно, графическая часть в виде MeshPart и Material. Подмножества элементов ссылок на сетку вершин в одном из сетки модели. Анимации могут применяться к узлам, чтобы модифицировать их преобразование (перевод, поворот, масштаб) со временем ". Обратите внимание, что это говорит о множестве вершин, который подразумевает, что модель является одной моделью, но вы отделяете их для своих нужд, назначая разные подмножества в узлы.

Из Xoppa:

В этом руководстве показано, как использовать иерархию узлов из приложения моделирования. Вот два руководства, объясняющих структуру узлов и способы их использования:

  1. теория
  2. практический
  • 0
    Спасибо за этот ответ. Это определенно помогло мне понять это. Как вы сказали, вы не знаете libgdx, и поэтому вы не можете отвечать на конкретные вопросы по libgdx, например, по именованию Node s, если оно такое же, как в Blender ... Для этого я оставлю этот вопрос открытым на несколько дней и тогда прими это. Я сам попробую эти вещи, и если я что-то узнаю, я добавлю это к этому ответу и приму это. еще раз спасибо
2

В настоящее время я работаю над этой точной проблемой. Узлы могут иметь узлы, которые могут иметь узлы! Вы можете найти определенный узел, используя ModelInstance.getNode(String NameOfNode); который возвращает объект типа Node. Эти узлы названы тем, что вы назвали объектами в блендере. EG, чтобы получить правую плечевую кость в модели с костью с именем Shoulder_R, вы могли бы сделать:

Node node = myModelInstance.getNode("Shoulder_R");

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

Мой желаемый конечный результат состоит в том, чтобы вручную изменить, например, когда рука указывает, чтобы он указывал на другой объект, пока анимация и модель продолжают воспроизводиться/перемещаться. Я надеюсь, что это поможет вам в ваших поисках, и если вы обнаружите ответ на оставшуюся часть тайны, пожалуйста, отправьте ответ!

  • 0
    Насколько я понял, вы можете модифицировать Node s, только если они не используются никакой Animation . Так что, возможно, ваша Animation влияет на тот же Node вы пытаетесь изменить вручную?
  • 3
    Таким образом, оказывается, что вы можете изменить часть тела, на которую влияет анимация, сначала установив для node.isAnimated значение true, а затем манипулируя localtransform. Моя проблема возникла в результате попытки манипулировать глобальными преобразованиями, которые были получены. В любом случае такой же эффект может быть достигнут путем манипулирования локальным преобразованием, смещающим родительский узел, или преобразованием моделей. Конечным результатом в моем тесте является ходячий робот, который теперь может направлять руку на целевую вершину во время движения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню