本文整理汇总了C++中osg::Quat::getRotate方法的典型用法代码示例。如果您正苦于以下问题:C++ Quat::getRotate方法的具体用法?C++ Quat::getRotate怎么用?C++ Quat::getRotate使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类osg::Quat
的用法示例。
在下文中一共展示了Quat::getRotate方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: writeUpdateTransformElements
void daeWriter::writeUpdateTransformElements(const osg::Vec3 &pos, const osg::Quat &q, const osg::Vec3 &s)
{
// Make a scale place element
domScale *scale = daeSafeCast< domScale >( currentNode->add( COLLADA_ELEMENT_SCALE ) );
scale->setSid("scale");
scale->getValue().append3( s.x(), s.y(), s.z() );
// Make a three rotate place elements for the euler angles
// TODO decompose quaternion into three euler angles
osg::Quat::value_type angle;
osg::Vec3 axis;
q.getRotate( angle, axis );
domRotate *rot = daeSafeCast< domRotate >( currentNode->add( COLLADA_ELEMENT_ROTATE ) );
rot->setSid("rotateZ");
rot->getValue().append4( 0, 0, 1, osg::RadiansToDegrees(angle) );
rot = daeSafeCast< domRotate >( currentNode->add( COLLADA_ELEMENT_ROTATE ) );
rot->setSid("rotateY");
rot->getValue().append4( 0, 1, 0, osg::RadiansToDegrees(angle) );
rot = daeSafeCast< domRotate >( currentNode->add( COLLADA_ELEMENT_ROTATE ) );
rot->setSid("rotateX");
rot->getValue().append4( 1, 0, 0, osg::RadiansToDegrees(angle) );
// Make a translate place element
domTranslate *trans = daeSafeCast< domTranslate >( currentNode->add( COLLADA_ELEMENT_TRANSLATE ) );
trans->setSid("translate");
trans->getValue().append3( pos.x(), pos.y(), pos.z() );
}
示例2:
inline void copyOsgQuatToLib3dsQuat(float lib3ds_vector[4], const osg::Quat& osg_quat)
{
//lib3ds_vector[0] = osg_quat[3]; // Not sure
//lib3ds_vector[1] = osg_quat[0];
//lib3ds_vector[2] = osg_quat[1];
//lib3ds_vector[3] = osg_quat[2];
// 3DS seems to store (angle in radians, axis_x, axis_y, axis_z), but it works with (axis_x, axis_y, axis_z, -angle in radians)!
osg::Quat::value_type angle, x, y, z;
osg_quat.getRotate(angle, x, y, z);
lib3ds_vector[0] = static_cast<float>(x);
lib3ds_vector[1] = static_cast<float>(y);
lib3ds_vector[2] = static_cast<float>(z);
lib3ds_vector[3] = static_cast<float>(-angle);
}
示例3: make_tuple
static boost::python::tuple getRotate_7cd433cce0eabe855a9b774688d2845e( ::osg::Quat const & inst ){
double angle2;
osg::Vec3f vec2;
inst.getRotate(angle2, vec2);
return bp::make_tuple( angle2, vec2 );
}
示例4: buttonEvent
//.........这里部分代码省略.........
//cout<<"Old Matrix"<<endl;
//curMatrix = SceneManager::instance()->getObjectTransform()->getMatrix();
//curScale = SceneManager::instance()->getObjectScale();
// printMat(curMatrix, curScale);
/*osg::Matrix mat2 = */
osg::Matrix rotM;
rotM.makeRotate(DegreesToRadians(1.0),osg::Vec3(0,1,0));
// printMat(rotM, curScale);
curMatrix= o2w * rotM * w2o;
// printMat(curMatrix, curScale);
//curMatrix.setTrans(trans);
//cout<<"New Matrix"<<endl;
//printMat(curMatrix, curScale);
cout<<"x = "<<origPlanetPoint[0]<<", y = "<<origPlanetPoint[1]<<", z = "<<origPlanetPoint[2]<<endl;
osg::Matrix objMat = SceneManager::instance()->getObjectTransform()->getMatrix();
objMat.decompose(trans1,rot1,scale1,so1);
_destMat1.decompose(trans2,rot2,scale2,so2);
// cout<<"rotate from"<<endl;
// printQuat(rot1);
// cout<<"rotate to"<<endl;
// printQuat(rot2);
osg::Vec3 vect1, vect2;
double ang1, ang2;
rot1.getRotate(ang1, vect1);
rot2.getRotate(ang2, vect2);
osg::Vec3 vec1 = rot1.asVec3();
osg::Vec3 vec2 = rot2.asVec3();
printVec(vect1);
printVec(vect2);
osg::Quat rotQuat;
rotQuat.makeRotate(vect1, vect2);
// printQuat(rotQuat);
rotM.makeRotate(rotQuat);
osg::Matrix mat = objMat* rotM;
mat.setTrans(trans1);
SceneManager::instance()->setObjectMatrix(mat);
}
else if(type == 'q') {
cout<<"Distance = "<<distanceToSurface<<endl;
}
else if(type == 'g') {
flagOut = false;
flagIn = false;
flagRot = false;
flagZoom = true;
osg::Matrix objMat = SceneManager::instance()->getObjectTransform()->getMatrix();
/* osg::Matrix rotM8;
rotM8.makeRotate(DegreesToRadians(10.0),osg::Vec3(0,1,0));
osg::Matrix mat9 = rotM8 * objMat;
SceneManager::instance()->setObjectMatrix(mat9);