本文整理汇总了C++中Matrix3::FromEulerAnglesXYZ方法的典型用法代码示例。如果您正苦于以下问题:C++ Matrix3::FromEulerAnglesXYZ方法的具体用法?C++ Matrix3::FromEulerAnglesXYZ怎么用?C++ Matrix3::FromEulerAnglesXYZ使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Matrix3
的用法示例。
在下文中一共展示了Matrix3::FromEulerAnglesXYZ方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: rotate
void GearsMeshBuilder::rotate( scalar rotX,scalar rotY,scalar rotZ )
{
Matrix3 mat;
mat.FromEulerAnglesXYZ(Radian(rotX),Radian(rotY),Radian(rotZ));
Quaternion quat(mat);
{
MeshSkeletonVector::Iterator i;
for (i=mMySkeletons.Begin(); i!=mMySkeletons.End(); ++i)
{
MeshSkeleton *ms = (*i);
for (int32 j=0; j<ms->mBoneCount; j++)
{
MeshBone &b = ms->mBones[j];
if ( b.mParentIndex == -1 )
{
b.mPosition = quat * b.mPosition;
b.mOrientation = quat * b.mOrientation;
}
}
}
}
{
GearMeshVector::Iterator i;
for (i=mMyMeshes.Begin(); i!=mMyMeshes.End(); ++i)
{
GearMesh *m = (*i);
uint32 vcount = m->mVertexPool.GetSize();
if ( vcount > 0 )
{
MeshVertex *vb = m->mVertexPool.GetBuffer();
for (uint32 j=0; j<vcount; j++)
{
vb->mPos = quat * vb->mPos;
vb++;
}
}
}
}
{
MeshAnimationVector::Iterator i;
for (i=mMyAnimations.Begin(); i!=mMyAnimations.End(); ++i)
{
MeshAnimation *ma = (*i);
for (int32 j=0; j<ma->mTrackCount && j <1; j++)
{
MeshAnimTrack *t = ma->mTracks[j];
for (int32 k=0; k<t->mFrameCount; k++)
{
MeshAnimPose &p = t->mPose[k];
p.mPos = quat * p.mPos;
p.mQuat = quat * p.mQuat;
}
}
}
}
}
示例2: getTargetOrientationForBody
Ogre::Quaternion VirtualModelMotionGenerator::getTargetOrientationForBody( const std::string& bodyName )
{
string targetName = getTargetOrientationNameForBodyName(bodyName);
Ogre::Vector3 rot = mMotions[mCurrentMotionIndex].getTargetAtTime( targetName, mPhi );
Matrix3 rotMat;
rotMat.FromEulerAnglesXYZ( Radian(rot.x), Radian(rot.y), Radian(rot.z) );
return Quaternion(rotMat);
}
示例3: quaternionFromString
//----------------------------------------------------------------------------
// Quaternion
Quaternion StringConv::quaternionFromString(const String& _str, size_t _start, size_t& _readcount)
{
Vector3 vec = fromString<Vector3>(_str, _start, _readcount);
if(!_readcount)
return Quaternion::ZERO;
Radian xAngle(Degree(vec.x));
Radian yAngle(Degree(vec.y));
Radian zAngle(Degree(vec.z));
Matrix3 mat;
mat.FromEulerAnglesXYZ(xAngle, yAngle, zAngle);
Quaternion q(mat);
return q;
}
示例4: chainTransformVertices
void tyrBarrShape::chainTransformVertices(std::vector<tdio_library::Vector3> *vtx){
vtxTransform.clear();
Vector3 min = _ply.GetMin();
Vector3 max = _ply.GetMax();
Vector3 range = max - min;
for(int i = 0; i < vtx->size(); i++){
Vector3 p = (*vtx)[i];
double offset = p.y - min.y;
offset /= (max.y-min.y);
Matrix3 mat;
mat.FromEulerAnglesXYZ(0,_twistAngle * offset,0);
Vector3 p2 = mat * p;
vtxTransform.push_back(p2);
//Vector3 P = getGlobalVertice(vtxParam[i],S,T,U);
//vtxTransform.push_back(P);
}
}
示例5: transformVertices
void tyrBarrShape::transformVertices(){
vtxTransform.clear();
point3D_t *vtx = _ply.GetVertices();
int nVtx = _ply.GetNumVertices();
Vector3 min = _ply.GetMin();
Vector3 max = _ply.GetMax();
Vector3 range = max - min;
for(int i = 0; i < nVtx; i++){
Vector3 p = vtx[i];
double offset = p.y - min.y;
offset /= (max.y-min.y);
Matrix3 mat;
mat.FromEulerAnglesXYZ(0,_twistAngle * offset,0);
Vector3 p2 = mat * p;
vtxTransform.push_back(p2);
}
}
示例6: LoadRotation
Quaternion OgreMaxUtilities::LoadRotation(const TiXmlElement* objectElement)
{
Quaternion rotation = Quaternion::IDENTITY;
if (objectElement->Attribute("qx") != 0)
{
//The rotation is specified as a quaternion
rotation.x = GetRealAttribute(objectElement, "qx", 0);
rotation.y = GetRealAttribute(objectElement, "qy", 0);
rotation.z = GetRealAttribute(objectElement, "qz", 0);
rotation.w = GetRealAttribute(objectElement, "qw", 0);
}
else if (objectElement->Attribute("axisX") != 0)
{
//The rotation is specified as an axis and angle
Real angle = GetRealAttribute(objectElement, "angle", 0);
Vector3 axis;
axis.x = GetRealAttribute(objectElement, "axisX", 0);
axis.y = GetRealAttribute(objectElement, "axisY", 0);
axis.z = GetRealAttribute(objectElement, "axisZ", 0);
//Convert the angle and axis into the rotation quaternion
rotation.FromAngleAxis(Radian(angle), axis);
}
else if (objectElement->Attribute("angleX") != 0)
{
//Assume the rotation is specified as three Euler angles
Vector3 euler;
euler.x = GetRealAttribute(objectElement, "angleX", 0);
euler.y = GetRealAttribute(objectElement, "angleY", 0);
euler.z = GetRealAttribute(objectElement, "angleZ", 0);
String order = GetStringAttribute(objectElement, "order");
//Convert Euler angles to a matrix
Matrix3 rotationMatrix;
if (order.length() < 2)
rotationMatrix.FromEulerAnglesXYZ(Radian(euler.x), Radian(euler.y), Radian(euler.z));
else
{
if (order[0] == 'x')
{
if (order[1] == 'y')
rotationMatrix.FromEulerAnglesXYZ(Radian(euler.x), Radian(euler.y), Radian(euler.z));
else
rotationMatrix.FromEulerAnglesXZY(Radian(euler.x), Radian(euler.y), Radian(euler.z));
}
else if (order[0] == 'y')
{
if (order[1] == 'x')
rotationMatrix.FromEulerAnglesYXZ(Radian(euler.x), Radian(euler.y), Radian(euler.z));
else
rotationMatrix.FromEulerAnglesYZX(Radian(euler.x), Radian(euler.y), Radian(euler.z));
}
else
{
if (order[1] == 'x')
rotationMatrix.FromEulerAnglesZXY(Radian(euler.x), Radian(euler.y), Radian(euler.z));
else
rotationMatrix.FromEulerAnglesZYX(Radian(euler.x), Radian(euler.y), Radian(euler.z));
}
}
//Convert the matrix into the rotation quaternion
rotation.FromRotationMatrix(rotationMatrix);
}
return rotation;
}