本文整理汇总了C++中math::Vector3::cross方法的典型用法代码示例。如果您正苦于以下问题:C++ Vector3::cross方法的具体用法?C++ Vector3::cross怎么用?C++ Vector3::cross使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类math::Vector3
的用法示例。
在下文中一共展示了Vector3::cross方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: lookAt
void Node::lookAt( const math::Vector3& target, const math::Vector3& up )
{
assert( Math::abs(up.length()-1.f) < 1e-3f ); // Up direction must be normalized
// src parent->world space
Matrix4x4 parentToWorld = Matrix4x4(1);
const Node* parent = this->parent();
while ( parent )
{
parentToWorld = parent->transform() * parentToWorld;
parent = parent->parent();
}
// src->world space
Matrix4x4 sourceToWorld = parentToWorld * transform();
// src -> target (world space)
Vector3 sourceRotZ = target - sourceToWorld.translation();
if ( sourceRotZ.lengthSquared() > Float::MIN_VALUE )
{
// src->target direction (world space)
sourceRotZ = sourceRotZ.normalize();
// src rotation (world space)
Vector3 sourceRotX = up.cross( sourceRotZ );
if ( sourceRotX.lengthSquared() > Float::MIN_VALUE )
sourceRotX = sourceRotX.normalize();
else
sourceRotX = Vector3(1,0,0);
Vector3 sourceRotY = sourceRotZ.cross( sourceRotX );
Matrix3x3 sourceRot;
sourceRot.setColumn( 0, sourceRotX );
sourceRot.setColumn( 1, sourceRotY );
sourceRot.setColumn( 2, sourceRotZ );
// src world space rotation back to src parent space
Matrix3x3 parentToWorldRot = parentToWorld.rotation();
Matrix3x3 rot = sourceRot * parentToWorldRot.inverse();
setRotation( rot );
}
}