mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-13 06:51:51 +00:00
add anonymous bones
This commit is contained in:
parent
3cb388eef0
commit
27683793a6
1 changed files with 30 additions and 0 deletions
|
|
@ -292,6 +292,34 @@ static void perform_box(const xmlelement& root, ModelBuilder& builder) {
|
||||||
builder.pop();
|
builder.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void perform_bone(const xmlelement& root, ModelBuilder& builder) {
|
||||||
|
glm::mat4 tsf(1.0f);
|
||||||
|
if (root.has("move")) {
|
||||||
|
tsf = glm::translate(tsf, root.attr("move").asVec3());
|
||||||
|
}
|
||||||
|
if (root.has("rotate")) {
|
||||||
|
auto text = root.attr("rotate").getText();
|
||||||
|
if (std::count(text.begin(), text.end(), ',') == 3) {
|
||||||
|
auto quat = root.attr("rotate").asVec4();
|
||||||
|
tsf *= glm::mat4_cast(glm::quat(quat.w, quat.x, quat.y, quat.z));
|
||||||
|
} else {
|
||||||
|
auto rot = root.attr("rotate").asVec3();
|
||||||
|
tsf = glm::rotate(tsf, glm::radians(rot.x), glm::vec3(1, 0, 0));
|
||||||
|
tsf = glm::rotate(tsf, glm::radians(rot.y), glm::vec3(0, 1, 0));
|
||||||
|
tsf = glm::rotate(tsf, glm::radians(rot.z), glm::vec3(0, 0, 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (root.has("scale")) {
|
||||||
|
tsf = glm::scale(tsf, root.attr("scale").asVec3());
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.push(std::move(tsf));
|
||||||
|
for (const auto& elem : root.getElements()) {
|
||||||
|
perform_element(*elem, builder);
|
||||||
|
}
|
||||||
|
builder.pop();
|
||||||
|
}
|
||||||
|
|
||||||
static void perform_element(const xmlelement& root, ModelBuilder& builder) {
|
static void perform_element(const xmlelement& root, ModelBuilder& builder) {
|
||||||
auto tag = root.getTag();
|
auto tag = root.getTag();
|
||||||
|
|
||||||
|
|
@ -301,6 +329,8 @@ static void perform_element(const xmlelement& root, ModelBuilder& builder) {
|
||||||
perform_box(root, builder);
|
perform_box(root, builder);
|
||||||
} else if (tag == "tri") {
|
} else if (tag == "tri") {
|
||||||
perform_triangle(root, builder);
|
perform_triangle(root, builder);
|
||||||
|
} else if (tag == "bone") {
|
||||||
|
perform_bone(root, builder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue