How to manually add a skeleton in Qt3d?
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
add a comment |
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
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
add a comment |
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
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
qt qt3d
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
add a comment |
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
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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