bone test

This commit is contained in:
devZoGok
2021-10-19 19:06:41 +03:00
parent 640bd6906a
commit 7111ef24e4
4 changed files with 54 additions and 29 deletions
+43 -24
View File
@@ -1,46 +1,65 @@
#include "boneTest.h"
#include "model.h"
#include "root.h"
#include "skeleton.h"
#include "mesh.h"
#include <string>
using namespace std;
namespace vb01{
BoneTest::BoneTest(){
}
void BoneTest::setUp(){
string PATH="/home/dominykas/c++/v/";
rootNode = Root::getSingleton()->getRootNode();
modelNodeParent = new Node();
modelNode = new Node();
rootNode->attachChild(modelNodeParent);
modelNodeParent->attachChild(modelNode);
Root *root = Root::getSingleton();
rootNode = root->getRootNode();
model = new Model(PATH + "../vb01/test.vb");
Material *glMat=new Material();
glMat->setTexturingEnabled(true);
glMat->setLightingEnabled(false);
glMat->addDiffuseMap(PATH+"defaultTexture.jpg");
//model->setMaterial(glMat);
rootNode->attachChild(model);
skeleton = new Skeleton();
Bone *rootBone = new Bone("rootBone", 1, Vector3::VEC_ZERO, Quaternion::QUAT_W, Vector3::VEC_IJK);
Bone *pelvis = new Bone("pelvis", 1, Vector3(0, 2, 0), Quaternion::QUAT_W, Vector3::VEC_IJK);
Bone *upperArm = new Bone("upperArm.R", 1, Vector3(0, 2, 0), Quaternion::QUAT_W, Vector3::VEC_IJK);
Bone *lowerArm = new Bone("lowerArm.R", 1, Vector3(0, 1, 0), Quaternion::QUAT_W, Vector3::VEC_IJK);
skeleton->addBone(rootBone, (Bone*)modelNode);
rootBone->lookAt(Vector3::VEC_K, Vector3::VEC_J);
skeleton->addBone(pelvis, rootBone);
pelvis->lookAt(Vector3::VEC_K, Vector3::VEC_J);
skeleton->addBone(upperArm, pelvis);
upperArm->lookAt(Vector3::VEC_K, Vector3(-1, 0 ,0));
skeleton->addBone(lowerArm, upperArm);
lowerArm->lookAt(Vector3::VEC_K, Vector3(0, 1 ,0));
}
void BoneTest::tearDown(){
rootNode->dettachChild(model);
delete model;
}
void BoneTest::testGetModelSpacePos(){
float eps = .0001;
Bone *lowerArm = skeleton->getBone("lowerArm.R");
Vector3 testModelSpacePos = Vector3(-1, 4, 0);
int numChildren = model->getNumChildren();
Skeleton *skeleton = model->getChild(numChildren - 1)->getMesh(0)->getSkeleton();
Bone *bone = skeleton->getBone("ik");
Vector3 initModelPos = bone->getModelSpacePos();
model->setPosition(Vector3(1, 2, 3));
Vector3 deltaModelPos = bone->getModelSpacePos();
CPPUNIT_ASSERT(lowerArm->getModelSpacePos().getDistanceFrom(testModelSpacePos) <= eps);
CPPUNIT_ASSERT(initModelPos.getDistanceFrom(deltaModelPos) <= eps);
modelNode->setPosition(Vector3::VEC_ZERO);
modelNode->setOrientation(Quaternion(.5, Vector3(1, 2, 3).norm()));
CPPUNIT_ASSERT(lowerArm->getModelSpacePos().getDistanceFrom(testModelSpacePos) <= eps);
modelNode->setOrientation(Quaternion::QUAT_W);
modelNode->setPosition(Vector3(10, 20, 30));
CPPUNIT_ASSERT(lowerArm->getModelSpacePos().getDistanceFrom(testModelSpacePos) <= eps);
modelNode->setOrientation(Quaternion(.5, Vector3(1, 2, 3).norm()));
modelNode->setPosition(Vector3(10, 20, 30));
CPPUNIT_ASSERT(lowerArm->getModelSpacePos().getDistanceFrom(testModelSpacePos) <= eps);
modelNodeParent->setOrientation(Quaternion(.3, Vector3(1, 2, 3).norm()));
modelNodeParent->setPosition(Vector3(100, 200, 300));
modelNode->setOrientation(Quaternion(.5, Vector3(1, 2, 3).norm()));
modelNode->setPosition(Vector3(10, 20, 30));
CPPUNIT_ASSERT(lowerArm->getModelSpacePos().getDistanceFrom(testModelSpacePos) <= eps);
}
}