本文整理汇总了C++中ogre::Quaternion::ToRotationMatrix方法的典型用法代码示例。如果您正苦于以下问题:C++ Quaternion::ToRotationMatrix方法的具体用法?C++ Quaternion::ToRotationMatrix怎么用?C++ Quaternion::ToRotationMatrix使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ogre::Quaternion
的用法示例。
在下文中一共展示了Quaternion::ToRotationMatrix方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: onRightButtonPressed
void PlayerCameraOgre::onRightButtonPressed()
{
if (!mRightButtonPressedLastFrame)
mMousePosLastFrame = mMouse->getPosition();
mp::Vector2i diff = mMouse->getPosition() - mMousePosLastFrame;
const mp::Vector3f &playerPos = mPlayer->model()->getPosition();
Ogre::Vector3 pivotPoint(playerPos.getX(), playerPos.getY() + mPivotHeight, playerPos.getZ());
float yaw = (float)diff.getX() * CAMERA_SPEED;
float pitch = (float)-diff.getY() * CAMERA_SPEED;
Ogre::Quaternion yawQuat;
yawQuat.FromAngleAxis(Ogre::Radian(yaw), Ogre::Vector3::UNIT_Y);
Ogre::Matrix3 yawMat;
yawQuat.ToRotationMatrix(yawMat);
Ogre::Vector3 pivotToPos = Ogre::Vector3(mRealPosition.getX(), mRealPosition.getY(), mRealPosition.getZ()) - pivotPoint;
Ogre::Matrix4 pos(1, 0, 0, pivotToPos.x,
0, 1, 0, pivotToPos.y,
0, 0, 1, pivotToPos.z,
0, 0, 0, 1);
Ogre::Vector3 xz(pivotToPos.x, 0, pivotToPos.z);
Ogre::Vector3 norm(-xz.z, 0, xz.x);
Ogre::Quaternion pitchQuat;
pitchQuat.FromAngleAxis(Ogre::Radian(pitch), norm);
Ogre::Matrix3 pitchMat;
pitchQuat.ToRotationMatrix(pitchMat);
Ogre::Matrix4 toPivot(1, 0, 0, pivotPoint.x,
0, 1, 0, pivotPoint.y,
0, 0, 1, pivotPoint.z,
0, 0, 0, 1);
Ogre::Matrix4 newPosMat = pos * pitchMat * yawMat * toPivot;
newPosMat = newPosMat.inverse();
Ogre::Vector3 newPos = newPosMat.getTrans();
mRealPosition.set(-newPos.x, -newPos.y, -newPos.z);
setPosition(mRealPosition);
lookAt(pivotPoint.x, pivotPoint.y, pivotPoint.z);
adjustDistance();
mMousePosLastFrame = mMouse->getPosition();
mRightButtonPressedLastFrame = true;
}
示例2:
void
BoxCenterMovable::getBoundingBoxCenter()
{
if(object.lock()->hasProperty("bounding box") && object.lock()->hasProperty("position"))
{
Ogre::AxisAlignedBox aabb = VariantCast<Ogre::AxisAlignedBox>(object.lock()->getProperty("bounding box"));
/*Ogre::Vector3 position = VariantCast<Ogre::Vector3>(object.lock()->getProperty("position"));
Ogre::Matrix4 matTrans;
matTrans.makeTrans( position );
aabb.transformAffine(matTrans);*/
Ogre::Matrix4 transform = Ogre::Matrix4::IDENTITY;
Ogre::Matrix3 rot3x3;
if (object.lock()->hasProperty("orientation"))
{
Ogre::Quaternion orientation = VariantCast<Ogre::Quaternion>(object.lock()->getProperty("orientation"));
orientation.ToRotationMatrix(rot3x3);
}
else
{
rot3x3 = Ogre::Matrix3::IDENTITY;
}
Ogre::Matrix3 scale3x3;
if (object.lock()->hasProperty("scale"))
{
Ogre::Vector3 scale = VariantCast<Ogre::Vector3>(object.lock()->getProperty("scale"));
scale3x3 = Ogre::Matrix3::ZERO;
scale3x3[0][0] = scale.x;
scale3x3[1][1] = scale.y;
scale3x3[2][2] = scale.z;
}
else
{
scale3x3 = Ogre::Matrix3::IDENTITY;
}
transform = rot3x3 * scale3x3;
if (object.lock()->hasProperty("position"))
{
Ogre::Vector3 position = VariantCast<Ogre::Vector3>(object.lock()->getProperty("position"));
transform.setTrans(position);
}
aabb.transformAffine(transform);
mCenterPosWC = aabb.getCenter();
}
}
示例3:
void
BuildTank::setBadGun(Ogre::Radian theta){
Ogre::Quaternion gunOrientation = mTankGunNode->getOrientation() ;
// convert orientation to a matrix
Ogre::Matrix3 tGunMatrix3;
gunOrientation.ToRotationMatrix( tGunMatrix3 );
Ogre::Vector3 xBasis = Ogre::Vector3(Ogre::Math::Cos(theta),0, - Ogre::Math::Sin(theta));
Ogre::Vector3 yBasis = Ogre::Vector3(0,1,0);
Ogre::Vector3 zBasis = Ogre::Vector3(Ogre::Math::Sin(theta),0,Ogre::Math::Cos(theta));
Ogre::Matrix3 rotate;
rotate.FromAxes(xBasis, yBasis, zBasis);
mGunOrientation = rotate * tGunMatrix3;
mTankGunNode->setOrientation(Ogre::Quaternion(mGunOrientation));
}
示例4:
Ogre::Vector3 LuaScriptUtilities::QuaternionToRotationDegrees(
const Ogre::Quaternion& quaternion)
{
Ogre::Vector3 angles;
Ogre::Radian xAngle;
Ogre::Radian yAngle;
Ogre::Radian zAngle;
Ogre::Matrix3 rotation;
quaternion.ToRotationMatrix(rotation);
rotation.ToEulerAnglesXYZ(xAngle, yAngle, zAngle);
angles.x = xAngle.valueDegrees();
angles.y = yAngle.valueDegrees();
angles.z = zAngle.valueDegrees();
return angles;
}
示例5: addTrajectoryPredictionMarkers
void Billboard::addTrajectoryPredictionMarkers()
{
visualization_msgs::InteractiveMarker predictionMarker;
predictionMarker = object_;
predictionMarker.controls.clear();
Ogre::Matrix3 *rotation = new Ogre::Matrix3();
Ogre::Quaternion orientation;
orientation.x = direction_.x;
orientation.y = direction_.y;
orientation.z = direction_.z;
orientation.w = direction_.w;
orientation.normalise();
orientation.ToRotationMatrix(*rotation);
Ogre::Vector3 position;
position.x = velocity_;
position.y = 0;
position.z = 0;
position = rotation->operator *(position);
predictionMarker.pose.position.x = pose_.position.x;
predictionMarker.pose.position.y = pose_.position.y;
predictionMarker.pose.position.z = pose_.position.z;
visualization_msgs::InteractiveMarkerControl predictionControl;
predictionControl.name = "prediction_control";
predictionControl.always_visible = true;
predictionControl.orientation_mode = InteractiveMarkerControl::VIEW_FACING;
predictionControl.interaction_mode = InteractiveMarkerControl::NONE;
for (int i = 1; i < PREDICTIONS_COUNT + 1; i++)
{
std::stringstream name;
name << name_ << "_prediction_" << i;
predictionMarker.name = name.str();
std::stringstream desc;
desc << i << "s";
predictionMarker.description = desc.str();
predictionMarker.pose.position.x += position.x;
predictionMarker.pose.position.y += position.y;
predictionMarker.pose.position.z += position.z;
predictionControl.markers.clear();
predictionMarker.controls.clear();
visualization_msgs::Marker sphere;
sphere.type = visualization_msgs::Marker::SPHERE;
sphere.color.g = 1;
sphere.color.b = 1;
sphere.color.a = 1;
sphere.scale.x = PREDICTION_SPHERE_SIZE;
sphere.scale.y = PREDICTION_SPHERE_SIZE;
sphere.scale.z = PREDICTION_SPHERE_SIZE;
predictionControl.markers.push_back(sphere);
predictionMarker.controls.push_back(predictionControl);
server_->insert(predictionMarker);
}
server_->applyChanges();
}