From d26c67a51e58c3f70d1689e265e9bebe578b50ad Mon Sep 17 00:00:00 2001 From: Luke Lau Date: Sun, 16 Feb 2020 01:40:32 +0000 Subject: [PATCH] WIP on inverse kinematics --- Makefile | 4 +- compile_flags.txt | 2 + ik.cpp | 159 ++++++++++++++++++++++++++++++++++++++++++++++ ik.hpp | 4 ++ main.cpp | 80 ++++++++++++++++++----- model.cpp | 27 ++++---- model.hpp | 23 ++++++- models/ik.blend | Bin 709796 -> 715844 bytes models/ik.glb | Bin 41972 -> 42376 bytes util.cpp | 11 ++++ util.hpp | 3 + 11 files changed, 283 insertions(+), 30 deletions(-) create mode 100644 ik.cpp create mode 100644 ik.hpp diff --git a/Makefile b/Makefile index 5d9c00c..6126267 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ all: bin/main -CXX_FLAGS := -g --std=c++17 -Wall +CXX_FLAGS := -g --std=c++17 -Wall -DDEBUG_NODES -bin/main: model.o material.o image.o skybox.o program.o main.o util.o +bin/main: model.o material.o image.o skybox.o program.o ik.o main.o util.o clang++ $(CXX_FLAGS) $^ \ -I/usr/local/include -L/usr/local/lib \ -lassimp \ diff --git a/compile_flags.txt b/compile_flags.txt index 5617deb..7ecd5cf 100644 --- a/compile_flags.txt +++ b/compile_flags.txt @@ -1,2 +1,4 @@ +-Wall -std=c++17 -I/usr/local/include/ +-DDEBUG_NODES diff --git a/ik.cpp b/ik.cpp new file mode 100644 index 0000000..fe4ecbb --- /dev/null +++ b/ik.cpp @@ -0,0 +1,159 @@ +#include "ik.hpp" +#include "util.hpp" + +using namespace glm; + +constexpr float tolerance = 0.3; + +const std::vector fabrik(const glm::vec3 t, + const std::vector jpsIn, // joint positions + const std::vector jds // distances between each joint + ) { + size_t N = jpsIn.size(); + assert(N == jds.size() + 1); + std::vector jps = jpsIn; + + float dist = distance(jps[0], t); + float totalLength = 0; + for (int i = 0; i < N - 1; i++) totalLength += jds[i]; + if (dist > totalLength) { // target is unreachable + for (int i = 0; i < N - 1; i++) { + float r = distance(t, jps[i]); + float lambda = jds[i] / r; + jps[i + 1] = (1.f - lambda) * jps[i] + lambda * t; + } + } else { // target is reachable + glm::vec3 b = jps[0]; + // distance between end effector and target + float diff = distance(jps[N - 1], t); + while (diff > tolerance) { + // forward reaching + jps[N - 1] = t; // set end effector to target + for (int i = N - 2; i >= 0; i--) { + float r = distance(jps[i + 1], jps[i]); + float lambda = jds[i] / r; + jps[i] = (1.f - lambda) * jps[i + 1] + lambda * jps[i]; + } + + // backward reaching + jps[0] = b; // reset root to initial pos + for (int i = 0; i < N - 1; i++) { + float r = distance(jps[i + 1], jps[i]); + float lambda = jds[i] / r; + jps[i + 1] = (1 - lambda) * jps[i] + lambda * jps[i + 1]; + } + + float newDiff = distance(jps[N - 1], t); + if (newDiff == diff) abort(); + diff = newDiff; + } + } + return jps; +} + +std::vector allNodesTo(const Model::Node &from, const Model::Node &to) { + if (from == to) return { to }; + assert(to.parent != nullptr); + auto res = allNodesTo(from, *to.parent); + res.push_back(to); + return res; +} + +mat4 getAbsTrans(const Model::Node &root, const Model::Node &n) { + if (root.ai.mName == n.ai.mName) + return mat4(1); //aiMatrixToMat4(n.ai.mTransformation); + assert(n.parent != nullptr); + return getAbsTrans(root, *n.parent) * aiMatrixToMat4(n.ai.mTransformation); +} + +vec3 extractPos(mat4 trans) { + return vec3(trans[3]); +} + +glm::mat4 absoluteToModelSpace(const Model::Node &root, const Model::Node &n, mat4 m) { + const Model::Node *parent = &n; + glm::mat4 res = m; + std::vector trans; + while (&parent->ai != &root.ai) { + trans.push_back(inverse(aiMatrixToMat4(parent->ai.mTransformation))); + parent = parent->parent; + } + while (!trans.empty()) { res = trans.back() * res; trans.pop_back(); } + return res; +} + +// Given points u and v on a sphere, calculate the transformation matrix +// to bring u -> v +// from https://math.stackexchange.com/a/2765250 +mat4 getRotationToPoint(vec3 u, vec3 v, float dist) { + if (distance(u, v) < 0.00001) return mat4(1); + vec3 n = cross(u, v) / length(cross(u, v)); + vec3 t = cross(n, u); + float alpha = atan2(dot(v, t), dot(v, u)); + mat4 T = mat4(mat3(u, t, n)); + mat4 R = rotate(mat4(1), alpha, {0, 0, 1}); // rotation in z axis + mat4 res = T * R * inverse(T); + return res; +} + + +void inverseKinematic(Model::Node &root, Model::Node &end, vec3 target) { + /* float s2o2 = sqrt(2.f) / 2.f; */ + /* assert(getRotationToPoint({1, 0, 0}, {0, s2o2, s2o2}, 1) */ + /* == mat4({0, s2o2, s2o2, 0}, { -s2o2, 1.f/2.f, -1.f/2.f, 0}, */ + /* {-s2o2, -1.f/2.f, 1.f/2.f, 0}, { 0, 0, 0, 1})); */ + + std::vector chain = allNodesTo(root, end); + assert(!chain.empty()); + + std::vector positions(chain.size()); std::vector distances(chain.size() - 1); + for (size_t i = 0; i < chain.size(); i++) { + mat4 absTrans = getAbsTrans(root, chain[i]); + positions[i] = extractPos(absTrans); + if (i > 0) + distances[i - 1] = distance(positions[i], positions[i - 1]); + } + + /* glm::vec3 targetPos(sin(d * 10.f), cos(d * 10.f), 0); */ + auto newPositions = fabrik(target, positions, distances); + + // Rotate all the nodes so that they are in the correct positions + for (size_t i = 1; i < chain.size(); i++) { + auto node = chain[i]; + mat4 absTrans = getAbsTrans(root, node); + absTrans[3] = vec4(newPositions[i], absTrans[3][3]); // update position in transform + + vec3 oldRelPos = extractPos(aiMatrixToMat4(node.ai.mTransformation)); + vec3 newRelPos = extractPos(absoluteToModelSpace(root, *node.parent, absTrans)); + + mat4 rot = getRotationToPoint(oldRelPos, newRelPos, distances[i - 1]); + node.ai.mTransformation = mat4ToaiMatrix(rot * aiMatrixToMat4(node.ai.mTransformation)); + + /* std::cerr << node.ai.mName.C_Str() << ":\n"; */ + /* printVec3(extractPos(aiMatrixToMat4(node.ai.mTransformation))); */ + /* printVec3(newRelPos); */ + assert(distance(extractPos(aiMatrixToMat4(node.ai.mTransformation)), newRelPos) < 0.0001); + + /* absTrans[3] = vec4(newPositions[i], absTrans[3][3]); // update position in transform */ + + /* mat4 relTrans = absoluteToModelSpace(root, *node.parent, absTrans); */ + /* node.ai.mTransformation = mat4ToaiMatrix(relTrans); */ + } + + // TODO: Now rotate all the nodes so that they face each other + + /* for (int i = 0; i < 3; i++) { */ + /* glm::mat4 absTrans(1); */ + /* findNodeTrans(&sceneModel->getRoot()->ai, aiString(jointNames[i]), */ + /* &absTrans); */ + /* glm::mat4 newAbsTrans = absTrans; */ + /* newAbsTrans[3] = glm::vec4(newPositions[i], newAbsTrans[3][3]); */ + + /* auto node = sceneModel->getRoot()->ai.FindNode(jointNames[i].c_str()); */ + + /* auto newTrans = worldSpaceToModelSpace(node->mParent, newAbsTrans); */ + + /* node->mTransformation = mat4ToaiMatrix(newTrans); */ + /* } */ +} + diff --git a/ik.hpp b/ik.hpp new file mode 100644 index 0000000..2786ffe --- /dev/null +++ b/ik.hpp @@ -0,0 +1,4 @@ +#include +#include "model.hpp" + +void inverseKinematic(Model::Node &end, Model::Node &root, glm::vec3 target); diff --git a/main.cpp b/main.cpp index 281da27..a579adf 100644 --- a/main.cpp +++ b/main.cpp @@ -21,6 +21,7 @@ #include "skybox.hpp" #include "image.hpp" #include "util.hpp" +#include "ik.hpp" #pragma clang diagnostic ignored "-Wdeprecated-declarations" @@ -101,6 +102,33 @@ void drawLight(Light &light) { glDrawArrays(GL_TRIANGLES, 0, 36); } +int findNodeTrans(const struct aiNode *n, const struct aiString name, glm::mat4 *dest) { + if (strcmp(n->mName.data, name.data) == 0) { + *dest = aiMatrixToMat4(n->mTransformation); + return 0; + } + for (int i = 0; i < n->mNumChildren; i++) { + if (findNodeTrans(n->mChildren[i], name, dest) == 0) { + glm::mat4 t = aiMatrixToMat4(n->mTransformation); + *dest = t * *dest; + return 0; + } + } + return 1; +} + +glm::mat4 worldSpaceToModelSpace(aiNode *node, glm::mat4 m) { + aiNode *parent = node; + glm::mat4 res = m; + std::vector trans; + while (parent != nullptr) { + /* res = res * glm::inverse(aiMatrixToMat4(parent->mTransformation)); */ + trans.push_back(glm::inverse(aiMatrixToMat4(parent->mTransformation))); + parent = parent->mParent; + } + while (!trans.empty()) { res = trans.back() * res; trans.pop_back(); } + return res; +} void display() { glClearColor(0.5, 0.5, 0.5, 1); @@ -140,8 +168,40 @@ void display() { glUniform3fv(glGetUniformLocation(pbrProg->progId, "lightPositions"), numLights, glm::value_ptr(lightPositions[0])); glUniform3fv(glGetUniformLocation(pbrProg->progId, "lightColors"), numLights, glm::value_ptr(lightColors[0])); + glm::vec3 targetPos(sin(d * 1.f), 0, cos(d * 1.f)); + inverseKinematic(*sceneModel->find("Bottom Bone"), *sceneModel->find("Toppest Bone"), targetPos); + + /* std::array jointPositions; std::array jointDistances; */ + + /* std::array jointNames = { "Bottom Bone", "Middle Bone", "Top Bone" }; */ + /* for (int i = 0; i < 3; i++) { */ + /* glm::mat4 trans; */ + /* findNodeTrans(&sceneModel->getRoot()->ai, aiString(jointNames[i]), &trans); */ + /* jointPositions[i] = glm::vec3(trans[3]); */ + + /* if (i > 0) */ + /* jointDistances[i - 1] = glm::distance(jointPositions[i], jointPositions[i - 1]); */ + /* } */ + + /* glm::vec3 targetPos(sin(d * 10.f), cos(d * 10.f), 0); */ + /* auto newPositions = fabrik(targetPos, jointPositions, jointDistances); */ + + /* for (int i = 0; i < 3; i++) { */ + /* glm::mat4 absTrans(1); */ + /* findNodeTrans(&sceneModel->getRoot()->ai, aiString(jointNames[i]), */ + /* &absTrans); */ + /* glm::mat4 newAbsTrans = absTrans; */ + /* newAbsTrans[3] = glm::vec4(newPositions[i], newAbsTrans[3][3]); */ + + /* auto node = sceneModel->getRoot()->ai.FindNode(jointNames[i].c_str()); */ + + /* auto newTrans = worldSpaceToModelSpace(node->mParent, newAbsTrans); */ + + /* node->mTransformation = mat4ToaiMatrix(newTrans); */ + /* } */ /* sceneModel->find("Top Bone")->transform = glm::rotate(glm::mat4(1), d / 5.f, { 1, 0, 0}); */ /* sceneModel->find("Bottom Bone")->transform = glm::rotate(glm::mat4(1), d / 3.f, { 1, 0, 0}); */ + sceneModel->draw(skyboxes[activeSkybox], d * 1000); for (Light &light: lights) drawLight(light); @@ -175,20 +235,6 @@ void setupLightBuffers(GLuint progId) { glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, 0, 0); } -int findNodeTrans(struct aiNode *n, const struct aiString name, glm::mat4 *dest) { - if (strcmp(n->mName.data, name.data) == 0) { - *dest = aiMatrixToMat4(n->mTransformation); - return 0; - } - for (int i = 0; i < n->mNumChildren; i++) { - if (findNodeTrans(n->mChildren[i], name, dest) == 0) { - glm::mat4 t = aiMatrixToMat4(n->mTransformation); - *dest = t * *dest; - return 0; - } - } - return 1; -} void init() { initUtilProg(); @@ -206,7 +252,7 @@ void init() { pbrProg = new Program("pbrvert.glsl", "pbrfrag.glsl"); glUseProgram(pbrProg->progId); - const std::string scenePath = "models/newtonsCradle.glb"; + const std::string scenePath = "models/ik.glb"; const aiScene *scene = importer.ReadFile(scenePath, aiProcess_Triangulate | aiProcess_CalcTangentSpace | aiProcess_GenNormals | aiProcess_FlipUVs); if (!scene) { std::cerr << importer.GetErrorString() << std::endl; @@ -269,6 +315,9 @@ void keyboardUp(unsigned char key, int x, int y) { void timer(int _) { #ifdef ENABLE_MOVEMENT float xSpeed = 0.f, ySpeed = 0.f, zSpeed = 0.f; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wchar-subscripts" if (keyStates['w']) zSpeed = 0.1f; if (keyStates['s']) @@ -281,6 +330,7 @@ void timer(int _) { ySpeed = 0.1f; if (keyStates['e']) ySpeed = -0.1f; +#pragma clang diagnostic pop camPos.x += xSpeed * sin(yaw) + zSpeed * cos(yaw); camPos.y += ySpeed; diff --git a/model.cpp b/model.cpp index 5302df0..345309a 100644 --- a/model.cpp +++ b/model.cpp @@ -115,13 +115,13 @@ Model::Mesh::Mesh(const aiMesh *aiMesh, GLuint progId) { glVertexAttribPointer(boneWeightLoc, 4, GL_FLOAT, GL_FALSE, sizeof(VertBones), (const GLvoid *)sizeof(VertBones::ids)); } -Model::Node::Node(const aiNode &node, GLuint progId, AnimMap *am): ai(node), progId(progId), animMap(am) { +Model::Node::Node(aiNode &node, GLuint progId, AnimMap *am, std::set allBones, Node *p): ai(node), parent(p), progId(progId), animMap(am), isBone(allBones.count(std::string(node.mName.C_Str())) > 0) { for (int i = 0; i < node.mNumMeshes; i++) { meshIndices.push_back(node.mMeshes[i]); } for (int i = 0; i < node.mNumChildren; i++) { - const aiNode *child = node.mChildren[i]; - children.push_back(new Node(*child, progId, am)); + aiNode *child = node.mChildren[i]; + children.push_back(new Node(*child, progId, am, allBones, this)); } } @@ -235,6 +235,9 @@ void Model::Node::draw( const std::vector &meshes, glm::mat4 m = totalTrans(parentTrans, tick); #ifdef DEBUG_NODES + if (isBone) + drawDebugNode(m, {0, 0.5, 1, 1}); + else drawDebugNode(m); #endif @@ -291,13 +294,6 @@ void Model::Node::draw( const std::vector &meshes, for (Node *child: children) child->draw(meshes, materials, skybox, tick, boneTransforms, m); } -void printMatrix4x4(aiMatrix4x4 m) { - fprintf(stderr, "%f, %f, %f, %f\n", m.a1, m.a2, m.a3, m.a4); - fprintf(stderr, "%f, %f, %f, %f\n", m.b1, m.b2, m.b3, m.b4); - fprintf(stderr, "%f, %f, %f, %f\n", m.c1, m.c2, m.c3, m.c4); - fprintf(stderr, "%f, %f, %f, %f\n", m.d1, m.d2, m.d3, m.d4); -} - void printHierarchy(aiNode *n, int indent = 0) { for (int i = 0; i < indent; i++) fprintf(stderr, "\t"); @@ -310,9 +306,12 @@ void printHierarchy(aiNode *n, int indent = 0) { Model::Model(const aiScene *scene, Program p): program(p) { glUseProgram(p.progId); + std::set allBones; for (int i = 0; i < scene->mNumMeshes; i++) { const aiMesh *mesh = scene->mMeshes[i]; meshes.push_back(Mesh(mesh, p.progId)); + for (int j = 0; j < mesh->mNumBones; j++) + allBones.insert(std::string(mesh->mBones[j]->mName.C_Str())); } for (unsigned int i = 0; i < scene->mNumMaterials; i++) { @@ -342,7 +341,9 @@ Model::Model(const aiScene *scene, Program p): program(p) { } } - root = new Node(*(scene->mRootNode), p.progId, &animMap); + printHierarchy(scene->mRootNode); + + root = new Node(*(scene->mRootNode), p.progId, &animMap, allBones, nullptr); } @@ -393,3 +394,7 @@ Model::Node* Model::Node::findNode(const aiNode &aiNode) { } return nullptr; } + +bool Model::Node::operator==(const Model::Node &rhs) const { + return &ai == &rhs.ai; +} diff --git a/model.hpp b/model.hpp index bf6f08f..e74d657 100644 --- a/model.hpp +++ b/model.hpp @@ -1,3 +1,6 @@ +#ifndef MODEL_HPP +#define MODEL_HPP + #include #include #include @@ -20,6 +23,14 @@ inline glm::mat4 aiMatrixToMat4(aiMatrix4x4 from) { return to; } +inline aiMatrix4x4 mat4ToaiMatrix(glm::mat4 from) { + aiMatrix4x4 to; + for (int i = 0; i < 4; i++) + for (int j = 0; j < 4; j++) + to[i][j] = from[j][i]; + return to; +} + class Model { struct Animation { @@ -49,23 +60,29 @@ class Model { class Node { public: - Node(const aiNode &aiNode, GLuint progId, AnimMap *animMap); + Node(aiNode &aiNode, GLuint progId, AnimMap *animMap, std::set allBones, Node *parent); + void draw(const std::vector &meshes, const std::vector &materials, const Skybox s, const float tick, const BoneTransforms &boneTransforms, glm::mat4 parentModel) const; const std::vector &getChildren() const { return children; } Node* findNode(const aiNode &aiNode); - const aiNode &ai; + aiNode &ai; // an extra transform glm::mat4 transform = glm::mat4(1); glm::mat4 totalTrans(const glm::mat4 parentTrans, const float tick) const; + const Node *parent; + + bool operator==(const Node &rhs) const; + private: const GLuint progId; const AnimMap *animMap; std::vector children; std::vector meshIndices; + const bool isBone; }; Node* getRoot() { return root; } @@ -85,3 +102,5 @@ class Model { BoneTransforms calcBoneTransforms(const Node &n, const float tick, const std::set bones, const glm::mat4 parentTrans) const; void loadModel(const std::string &path); }; + +#endif diff --git a/models/ik.blend b/models/ik.blend index 247fb50259ee67006f4d20757f66aa37d1cb250a..544239981adc6d3ae1efe08c9166543a048f2c83 100644 GIT binary patch delta 78421 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 z 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 Qzk5%yKeVT~(f%3#2cujdxc~qF delta 76786 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 diff --git a/models/ik.glb b/models/ik.glb index 33539b76e0a376f055a6fb48e02263ca95c94c38..8203a059d030f1310d6245f79fc3738d8504d241 100644 GIT binary patch delta 5889 zcmeHKX?RrC8J=upnPese0tkT&6Rg(W4ENmq2FW=ns{|q;1VLjOU;+stNs~!|2htlC z42qV7LqQM`i&iX;2m}NIv*a_ndEg zzxVylOwPR?IsdIl*VOX-p^*-UWB#)aM_kt?*PWJsR={6TQ(9S3Gp@!z#hZ1vcjWNA zqVm$I(*iX`Rkan91GUBF-a^59%`ngZo7&Rq|Iyf+HRrk!VcAYHEKmbE=XfVqmRDB8 z9TMOL*-9%yWd&w?vydo?f;TX`%J0qcR#n1|SMXL8&#)hJ>^i-5g>_AL_s>UyESLfk z3+o_2MdcKKIP|r`|4S_aZt^4A3DhmqYa9U((D4b9Y$ zp&-=|GDV+a7?LcC3ap7p)=kA;6cts5M@i9D#S~Rt5PgPbXp)AIu8W#v8V1x_Gr71N z(AeO802VHUOi45)!_-3E2viqW)RY$ofF>|A#`r`-G&E6>RCpow{qFGocK*Oh%mQShn+wqh_f$od+S~8@Cpa2Z4P52u^ zAR12BXHF_}?k2eJG=-j+fgL1rCrr^yVa@Xy-xp{+aS5WS?pa}6%k<>0MlH0|FsTb&) zP6izq*T=>0Af3*OyV0c!-ZJ~NuulO^pj+bdDNabVR7FL)h-{t0oPwGqXsC`6AE=sLPo`SHyeZKAj$pPhAx63@xv7rO@<*RJz1<3;i%5 zliJT7XDa>DnMsSBV3rUeQjL@_=t8$KD6$S95DdQo`nU{2P<*yP zL<0mQ8Zh55_*Y;_J`JWA8ez{cfJX|T&_GAf256I{D4N|V9c~m=g>6|wfEZ4We})wfkIMs3$R<{@T@-7A0oTXI#B$Yod+iSM*|{jin3CPV!J^d>&x)(785zu-yTl z^)3(nE0o&x{WSZ&jZGT4ThDZmc2+=UeB5iW_qK~DdL<0nSH8To^^73NWNF{vR zmfSg7fz!!ePlX{Cypv`J{JAA1HGVkcRZ*2f9&Rv$^HaI{pox+a$^^dQRXY=md3Y6s zaCJ4(FzCzfJ~YkUIodSAz^<#8J0%9`s%AitG&;xKIR?&WWGBmn(^VD?`PhIlyylGLDU}4lqQGcwh^NpYu}#9T>G|T>An}S>xC1{H9el}A32oF zo>a`vPTGn4o!Eqr^~z!AKiGjUJh~m5yA0N4TnnCl51uh)X*RB%=HrM^!Qyk?)W9VCu0a(vT+#xw!%T4**k&t zY%=ki$qq8>OeK4~)rT{-{b1qoV;^7*&)$T`?f3>)J^XvNb3s2mDeoNKE-Yi)7T$;( z*Pp^oZGU9ebGP80JwC=~`>thYSIKziJ4dkc>IU|=41#wl@8YzXFR}BRa&foDU3iLn z8ymj882>5jFL-|SHdZyS7XS949eB%%Ev)F~c{q=4#+ROIX1Qyuh4}bQ>+$l{FR+1! zmSN+AU4@VGIH*zgZF;;(u=k3SpKz~+zGic20` z+wPvHhNpw~<*8v7mw@MqFM{WcFVyDm3VmTTVK6+EJYt^KD_ybdw(uPDt>gLT+skv` zjsi{xJWaeNcq&03gRcsN=bIM`uL({#yl$H3)OU}u>ahd#*kNz0Ba=gJtHY3ofm}dY`{?zQl|FxkjqPc0_r3kvb!5urw!le#*Kyzcmw^7Z1UQiujefm-n z?zZ$o>%{n+onT#GTM)>elp2l8p3Gym_h$$9XRnS_@!9jqpmW$iQ`>sefvDhtC%yvv zdR+GYR9vxcU+dhuxgr0SzmLjZx;P0x^!@0N|I#>?eg9|!x9v_1`FoZPANYyqf#Aiq z(pK=d@FTChmn{`P+FCxc&~~WbIJY|+^K=HDZ+!;_4#yiO`{S->bUf>xLj&#oe*{kL z{Kd>I!OFHKu&>7vn?7NCo$17L8j&Nn3c>vg?jY-LZ6u%89brTErjr|1D`e%ty=-Vx zI*B}|lQ*O{*|?E?$iUzLQu2`%WM3zyk?BV<={LBA-FC7EIfe$4fsLEl*RiQ2`@!Ml z+=Y#7@nd+|ngkUEL$;XBDwWt&)RaVN6spr}}Ii92ye8&O}ZFp-zKH2nrWUwawUA#MH3|YA+Hdye7_wZtK6v@5d z3?`=>#wFcHkS~V0gLPw%;#02=CdZ!c9PFI-8D3ONNZjd^U{?BBeDIE2$@26r!O_t_ z;8&^)vO!4+THkJpB4UzC3bf?lm*?WhoIw)FFp`30E*Hu8rAQtfA0Je9r;yk7`^ZZz z(ZR;J?qp1%k3{sj#6EBAN$%h7BTHQ8*uo*bNz3Q`+uifj@N{s#Ry%I^1UyfC5hWj8 zql_<o73P(13(qm%I-YO7y*&3k1-uS;ns`mD9LsUZ3xwzUs#riP vye581H_dbFyZ!vDz&;x~@ZHhh3P1lU`2XfV^}6bBKJ?@botpQgtSb8#P!`!q delta 4923 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 Cc~39^ diff --git a/util.cpp b/util.cpp index 796017d..c7b3f4d 100644 --- a/util.cpp +++ b/util.cpp @@ -45,3 +45,14 @@ void drawDebugNode(glm::mat4 model, glm::vec4 color) { glUseProgram(prevProg); } + +void printMatrix4x4(aiMatrix4x4 m) { + fprintf(stderr, "%f, %f, %f, %f\n", m.a1, m.a2, m.a3, m.a4); + fprintf(stderr, "%f, %f, %f, %f\n", m.b1, m.b2, m.b3, m.b4); + fprintf(stderr, "%f, %f, %f, %f\n", m.c1, m.c2, m.c3, m.c4); + fprintf(stderr, "%f, %f, %f, %f\n", m.d1, m.d2, m.d3, m.d4); +} + +void printVec3(glm::vec3 v) { + fprintf(stderr, "{ %f, %f, %f }\n", v[0], v[1], v[2]); +} diff --git a/util.hpp b/util.hpp index 89236e2..84b2060 100644 --- a/util.hpp +++ b/util.hpp @@ -1,6 +1,9 @@ #include "program.hpp" #include +#include void initUtilProg(); Program *getUtilProg(); void drawDebugNode(glm::mat4 transform, glm::vec4 color = {1, 0.5, 1, 1}); +void printMatrix4x4(aiMatrix4x4 m); +void printVec3(glm::vec3 v); -- 2.30.2