KameleonTransformationMatrix() in Transformation manager

This commit is contained in:
Sebastian Piwell
2016-06-06 10:20:53 -04:00
parent 4ae4ecca3c
commit 9e7c420719
5 changed files with 57 additions and 52 deletions

View File

@@ -48,6 +48,29 @@
_kameleon = nullptr;
}
glm::dmat3 TransformationManager::kameleonTransformationMatrix( std::string from,
std::string to,
double ephemerisTime) const
{
ccmc::Position in0 = {1.f, 0.f, 0.f};
ccmc::Position in1 = {0.f, 1.f, 0.f};
ccmc::Position in2 = {0.f, 0.f, 1.f};
ccmc::Position out0;
ccmc::Position out1;
ccmc::Position out2;
_kameleon->_cxform(from.c_str(), to.c_str(), ephemerisTime, &in0, &out0);
_kameleon->_cxform(from.c_str(), to.c_str(), ephemerisTime, &in1, &out1);
_kameleon->_cxform(from.c_str(), to.c_str(), ephemerisTime, &in2, &out2);
return glm::dmat3(
out0.c0 , out0.c1 , out0.c2,
out1.c0 , out1.c1 , out1.c2,
out2.c0 , out2.c1 , out2.c2
);
}
glm::dmat3 TransformationManager::frameTransformationMatrix(std::string from,
std::string to,
double ephemerisTime) const
@@ -67,7 +90,13 @@
ccmc::Position in0 = {1.f, 0.f, 0.f};
ccmc::Position in1 = {0.f, 1.f, 0.f};
ccmc::Position in2 = {0.f, 0.f , 1.f};
ccmc::Position in2 = {0.f, 0.f, 1.f};
glm::dmat3 in(
in0.c0, in0.c1, in0.c2,
in1.c0, in1.c1, in1.c2,
in2.c0, in2.c1, in2.c2
);
ccmc::Position out0;
ccmc::Position out1;
@@ -79,43 +108,17 @@
#ifdef OPENSPACE_MODULE_KAMELEON_ENABLED
if(fromKameleon && toKameleon){
_kameleon->_cxform(from.c_str(), to.c_str(), ephemerisTime, &in0, &out0);
_kameleon->_cxform(from.c_str(), to.c_str(), ephemerisTime, &in1, &out1);
_kameleon->_cxform(from.c_str(), to.c_str(), ephemerisTime, &in2, &out2);
return glm::dmat3(
out0.c0 , out0.c1 , out0.c2,
out1.c0 , out1.c1 , out1.c2,
out2.c0 , out2.c1 , out2.c2
);
return kameleonTransformationMatrix(from, to, ephemerisTime);
}else if(fromKameleon && !toKameleon){
_kameleon->_cxform(from.c_str(), "J2000", ephemerisTime, &in0, &out0);
_kameleon->_cxform(from.c_str(), "J2000", ephemerisTime, &in1, &out1);
_kameleon->_cxform(from.c_str(), "J2000", ephemerisTime, &in2, &out2);
glm::dmat3 kameleonTransformation(
out0.c0 , out0.c1 , out0.c2,
out1.c0 , out1.c1 , out1.c2,
out2.c0 , out2.c1 , out2.c2
);
glm::dmat3 kameleonTransformation = kameleonTransformationMatrix(from, "J2000", ephemerisTime);
glm::dmat3 spiceTransformation = SpiceManager::ref().frameTransformationMatrix("J2000", to, ephemerisTime);
return spiceTransformation*kameleonTransformation;
}else if(!fromKameleon && toKameleon){
glm::dmat3 spiceTransformation = SpiceManager::ref().frameTransformationMatrix(from, "J2000", ephemerisTime);
_kameleon->_cxform("J2000", to.c_str(), ephemerisTime, &in0, &out0);
_kameleon->_cxform("J2000", to.c_str(), ephemerisTime, &in1, &out1);
_kameleon->_cxform("J2000", to.c_str(), ephemerisTime, &in2, &out2);
glm::dmat3 kameleonTransformation(
out0.c0 , out0.c1 , out0.c2,
out1.c0 , out1.c1 , out1.c2,
out2.c0 , out2.c1 , out2.c2
);
glm::dmat3 kameleonTransformation = kameleonTransformationMatrix("J2000", to, ephemerisTime);
return kameleonTransformation*spiceTransformation;
}