How to manually add a skeleton in Qt3d?












0















In Qt, I added a Mesh using QSceneLoader, but I wanted to rig the mesh manually in QT using the classes from Qt3D: QJoint, QSkeleton, and QArmature. I have not seen a lot of documentation on creating a skeleton that's applied to a mesh through C++ alone.



Even without C++, I found you can give an armature value in QML, but the file needs to be a .gltf. What I want to do is use C++ directly to make a skeleton so the programming-side has full control of the bone hierarchy.



QSkeleton gives one the abilitiy to add joints and child joints, but how are these joints then applied to the mesh? If there's any examples on this that would also be a great help.



Here's what I've tried:



Qt3DCore::QSkeleton* skeleton = new Qt3DCore::QSkeleton();
Qt3DCore::QJoint* joint = new Qt3DCore::QJoint();
joint->setTranslation(entityTransform->translation());
skeleton->setRootJoint(joint);
Qt3DCore::QArmature* a = new Qt3DCore::QArmature();
a->setSkeleton(skeleton);
entity->addComponent(a);


I also have an update function where I change the joint's translation/rotation and re-apply the skeleton to the armature, but it does nothing, so I don't know if the joint/armature has been applied properly to the mesh.










share|improve this question




















  • 1





    You also have to set the skeleton on the armature. But other than that it looks like you have to add an attribute to the vertices of your model which captures the index of the joint it is influenced by, as well as the weight of the joint. You then need a custom shader that takes the joints into account. Maybe this test from the tests folder of the Qt3D git repository can help you.

    – Florian Blume
    Nov 14 '18 at 9:56











  • oh yes, I did set the skeleton, but I haven't done any GLSL. I was trying to avoid that if I could. I thought there might be something similar to a Game Engine where you can load a mesh/skeleton and update joints through code.

    – karamazovbros
    Nov 14 '18 at 20:51
















0















In Qt, I added a Mesh using QSceneLoader, but I wanted to rig the mesh manually in QT using the classes from Qt3D: QJoint, QSkeleton, and QArmature. I have not seen a lot of documentation on creating a skeleton that's applied to a mesh through C++ alone.



Even without C++, I found you can give an armature value in QML, but the file needs to be a .gltf. What I want to do is use C++ directly to make a skeleton so the programming-side has full control of the bone hierarchy.



QSkeleton gives one the abilitiy to add joints and child joints, but how are these joints then applied to the mesh? If there's any examples on this that would also be a great help.



Here's what I've tried:



Qt3DCore::QSkeleton* skeleton = new Qt3DCore::QSkeleton();
Qt3DCore::QJoint* joint = new Qt3DCore::QJoint();
joint->setTranslation(entityTransform->translation());
skeleton->setRootJoint(joint);
Qt3DCore::QArmature* a = new Qt3DCore::QArmature();
a->setSkeleton(skeleton);
entity->addComponent(a);


I also have an update function where I change the joint's translation/rotation and re-apply the skeleton to the armature, but it does nothing, so I don't know if the joint/armature has been applied properly to the mesh.










share|improve this question




















  • 1





    You also have to set the skeleton on the armature. But other than that it looks like you have to add an attribute to the vertices of your model which captures the index of the joint it is influenced by, as well as the weight of the joint. You then need a custom shader that takes the joints into account. Maybe this test from the tests folder of the Qt3D git repository can help you.

    – Florian Blume
    Nov 14 '18 at 9:56











  • oh yes, I did set the skeleton, but I haven't done any GLSL. I was trying to avoid that if I could. I thought there might be something similar to a Game Engine where you can load a mesh/skeleton and update joints through code.

    – karamazovbros
    Nov 14 '18 at 20:51














0












0








0








In Qt, I added a Mesh using QSceneLoader, but I wanted to rig the mesh manually in QT using the classes from Qt3D: QJoint, QSkeleton, and QArmature. I have not seen a lot of documentation on creating a skeleton that's applied to a mesh through C++ alone.



Even without C++, I found you can give an armature value in QML, but the file needs to be a .gltf. What I want to do is use C++ directly to make a skeleton so the programming-side has full control of the bone hierarchy.



QSkeleton gives one the abilitiy to add joints and child joints, but how are these joints then applied to the mesh? If there's any examples on this that would also be a great help.



Here's what I've tried:



Qt3DCore::QSkeleton* skeleton = new Qt3DCore::QSkeleton();
Qt3DCore::QJoint* joint = new Qt3DCore::QJoint();
joint->setTranslation(entityTransform->translation());
skeleton->setRootJoint(joint);
Qt3DCore::QArmature* a = new Qt3DCore::QArmature();
a->setSkeleton(skeleton);
entity->addComponent(a);


I also have an update function where I change the joint's translation/rotation and re-apply the skeleton to the armature, but it does nothing, so I don't know if the joint/armature has been applied properly to the mesh.










share|improve this question
















In Qt, I added a Mesh using QSceneLoader, but I wanted to rig the mesh manually in QT using the classes from Qt3D: QJoint, QSkeleton, and QArmature. I have not seen a lot of documentation on creating a skeleton that's applied to a mesh through C++ alone.



Even without C++, I found you can give an armature value in QML, but the file needs to be a .gltf. What I want to do is use C++ directly to make a skeleton so the programming-side has full control of the bone hierarchy.



QSkeleton gives one the abilitiy to add joints and child joints, but how are these joints then applied to the mesh? If there's any examples on this that would also be a great help.



Here's what I've tried:



Qt3DCore::QSkeleton* skeleton = new Qt3DCore::QSkeleton();
Qt3DCore::QJoint* joint = new Qt3DCore::QJoint();
joint->setTranslation(entityTransform->translation());
skeleton->setRootJoint(joint);
Qt3DCore::QArmature* a = new Qt3DCore::QArmature();
a->setSkeleton(skeleton);
entity->addComponent(a);


I also have an update function where I change the joint's translation/rotation and re-apply the skeleton to the armature, but it does nothing, so I don't know if the joint/armature has been applied properly to the mesh.







qt qt3d






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 14 '18 at 21:32







karamazovbros

















asked Nov 14 '18 at 0:44









karamazovbroskaramazovbros

3571217




3571217








  • 1





    You also have to set the skeleton on the armature. But other than that it looks like you have to add an attribute to the vertices of your model which captures the index of the joint it is influenced by, as well as the weight of the joint. You then need a custom shader that takes the joints into account. Maybe this test from the tests folder of the Qt3D git repository can help you.

    – Florian Blume
    Nov 14 '18 at 9:56











  • oh yes, I did set the skeleton, but I haven't done any GLSL. I was trying to avoid that if I could. I thought there might be something similar to a Game Engine where you can load a mesh/skeleton and update joints through code.

    – karamazovbros
    Nov 14 '18 at 20:51














  • 1





    You also have to set the skeleton on the armature. But other than that it looks like you have to add an attribute to the vertices of your model which captures the index of the joint it is influenced by, as well as the weight of the joint. You then need a custom shader that takes the joints into account. Maybe this test from the tests folder of the Qt3D git repository can help you.

    – Florian Blume
    Nov 14 '18 at 9:56











  • oh yes, I did set the skeleton, but I haven't done any GLSL. I was trying to avoid that if I could. I thought there might be something similar to a Game Engine where you can load a mesh/skeleton and update joints through code.

    – karamazovbros
    Nov 14 '18 at 20:51








1




1





You also have to set the skeleton on the armature. But other than that it looks like you have to add an attribute to the vertices of your model which captures the index of the joint it is influenced by, as well as the weight of the joint. You then need a custom shader that takes the joints into account. Maybe this test from the tests folder of the Qt3D git repository can help you.

– Florian Blume
Nov 14 '18 at 9:56





You also have to set the skeleton on the armature. But other than that it looks like you have to add an attribute to the vertices of your model which captures the index of the joint it is influenced by, as well as the weight of the joint. You then need a custom shader that takes the joints into account. Maybe this test from the tests folder of the Qt3D git repository can help you.

– Florian Blume
Nov 14 '18 at 9:56













oh yes, I did set the skeleton, but I haven't done any GLSL. I was trying to avoid that if I could. I thought there might be something similar to a Game Engine where you can load a mesh/skeleton and update joints through code.

– karamazovbros
Nov 14 '18 at 20:51





oh yes, I did set the skeleton, but I haven't done any GLSL. I was trying to avoid that if I could. I thought there might be something similar to a Game Engine where you can load a mesh/skeleton and update joints through code.

– karamazovbros
Nov 14 '18 at 20:51












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53291574%2fhow-to-manually-add-a-skeleton-in-qt3d%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53291574%2fhow-to-manually-add-a-skeleton-in-qt3d%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Xamarin.iOS Cant Deploy on Iphone

Glorious Revolution

Dulmage-Mendelsohn matrix decomposition in Python