本文整理汇总了C++中Matrix4x4::RotZ方法的典型用法代码示例。如果您正苦于以下问题:C++ Matrix4x4::RotZ方法的具体用法?C++ Matrix4x4::RotZ怎么用?C++ Matrix4x4::RotZ使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Matrix4x4
的用法示例。
在下文中一共展示了Matrix4x4::RotZ方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Point
// ### must be optimized... consider using the 3x3 version
Matrix4x4& Matrix4x4::Rot(float angle, Point& p1, Point& p2)
{
Point Axis = (p2 - p1).Normalize();
Matrix4x4 T, InvT;
T.Identity();
T.SetTrans(-p1.x, -p1.y, -p1.z);
InvT = T;
InvT.Invert();
Matrix4x4 Rx, InvRx;
Rx.Identity();
float d = _sqrt(Axis.y*Axis.y + Axis.z*Axis.z);
if(d!=0.0f)
{
float CosAngle = Axis.z / d;
float SinAngle = Axis.y / d;
Rx.SetRow(1, Point(0.0f, CosAngle, SinAngle));
Rx.SetRow(2, Point(0.0f, -SinAngle, CosAngle));
}
InvRx = Rx;
InvRx.Invert();
Matrix4x4 Ry, InvRy;
Ry.Identity();
Ry.SetRow(0, Point(d, 0.0f, Axis.x));
Ry.SetRow(2, Point(-Axis.x, 0.0f, d));
InvRy = Ry;
InvRy.Invert();
Matrix4x4 Rz;
Rz.RotZ(angle);
Matrix4x4 Combo = T * Rx * Ry * Rz * InvRy * InvRx * InvT;
*this = Combo;
return *this;
}