Я пытаюсь лучше понять Model
и их иерархию Node
в Libgdx
. Насколько я понял, Model
состоит из многих дочерних Node
, которые могут содержать и другой Node
. Каждый узел имеет Vector3 translation
описывающую ее положение, Vector3 scale
, описывающий его масштаб и Quaternion rotation
описывающий его вращение, по отношению к родительскому Node
или Model
. Matrix4 gloabalTransform
описывает то же самое, но относительно мира, в котором они находятся.
Теперь, если я думаю о таких играх, как Garrys Mod
, где Model
Player
может динамически перемещать части модели (например, если они лежат на краю после того, как они умерли, их верхняя часть тела может свисать с стены), я могу только думать о, что они изменяют единый Node
во время выполнения в исходном коде. Теперь мои вопросы:
Node
в Blender
(скажем, 1 Node
- левая нижняя нога, 1 Node
- левая верхняя нога...) и получить и изменить их во время выполнения, используя (например) modelInstance.getNode("leftLowerLeg").translation.set(Vector3 position)
, или они созданы и называются автоматически, в зависимости от формы, лица...?Большое спасибо!
Глядя на что это похоже, что понятие узла является то, что графа сцены. Ваша модель может быть изготовлена из деталей (MeshPart), и каждая отдельная часть является дочерним узлом узла. Наличие отдельного узла означает, что вы можете применять к нему преобразования, тем самым перемещая его независимо от любой другой части модели. Таким образом, кажется, что вы хотите построить свою модель в виде отдельных частей и загрузить эти части в иерархию узлов в соответствии с вашими потребностями. Сохраните ссылку на узел, который вы хотите переместить независимо, и примените преобразования.
Узел может "содержать" MeshPart (т.е. MeshPart является дочерним узлом узла). Узлы могут содержать другие узлы. взгляните на википедию для терминологии графа сцены. Повесьте в документах для модели: "Модель представляет собой 3D-активы. Она хранит иерархию узлов. У узла есть преобразование и, необязательно, графическая часть в виде MeshPart и Material. Подмножества элементов ссылок на сетку вершин в одном из сетки модели. Анимации могут применяться к узлам, чтобы модифицировать их преобразование (перевод, поворот, масштаб) со временем ". Обратите внимание, что это говорит о множестве вершин, который подразумевает, что модель является одной моделью, но вы отделяете их для своих нужд, назначая разные подмножества в узлы.
Из Xoppa:
В этом руководстве показано, как использовать иерархию узлов из приложения моделирования. Вот два руководства, объясняющих структуру узлов и способы их использования:
В настоящее время я работаю над этой точной проблемой. Узлы могут иметь узлы, которые могут иметь узлы! Вы можете найти определенный узел, используя ModelInstance.getNode(String NameOfNode);
который возвращает объект типа Node. Эти узлы названы тем, что вы назвали объектами в блендере. EG, чтобы получить правую плечевую кость в модели с костью с именем Shoulder_R
, вы могли бы сделать:
Node node = myModelInstance.getNode("Shoulder_R");
узел, который содержит всю информацию, относящуюся к этой кости, включая перевод, поворот, масштаб и соответствующие матрицы преобразования. В настоящее время я застрял в попытке манипулировать этими костями во время воспроизведения анимации, после обновления контроллера анимации.
Мой желаемый конечный результат состоит в том, чтобы вручную изменить, например, когда рука указывает, чтобы он указывал на другой объект, пока анимация и модель продолжают воспроизводиться/перемещаться. Я надеюсь, что это поможет вам в ваших поисках, и если вы обнаружите ответ на оставшуюся часть тайны, пожалуйста, отправьте ответ!
Node
s, только если они не используются никакой Animation
. Так что, возможно, ваша Animation
влияет на тот же Node
вы пытаетесь изменить вручную?
Node
s, если оно такое же, как в Blender ... Для этого я оставлю этот вопрос открытым на несколько дней и тогда прими это. Я сам попробую эти вещи, и если я что-то узнаю, я добавлю это к этому ответу и приму это. еще раз спасибо