/*
================
InterpolateStaticPState
================
*/
staticPState_t InterpolateStaticPState( const staticInterpolatePState_t& previous, const staticInterpolatePState_t& next, float fraction )
{
	staticPState_t result;
	
	result.origin = Lerp( previous.origin, next.origin, fraction );
	result.axis = idQuat().Slerp( previous.axis, next.axis, fraction ).ToMat3();
	
	result.localOrigin = Lerp( previous.localOrigin, next.localOrigin, fraction );
	result.localAxis = idQuat().Slerp( previous.localAxis, next.localAxis, fraction ).ToMat3();
	
	return result;
}
Beispiel #2
0
/*
============
idRotation::ToQuat
============
*/
idQuat idRotation::ToQuat( void ) const {
	float a, s, c;

	a = angle * ( idMath::M_DEG2RAD * 0.5f );
	idMath::SinCos( a, s, c );
	return idQuat( vec.x * s, vec.y * s, vec.z * s, c );
}
Beispiel #3
0
/*
=================
idAngles::ToQuat
=================
*/
idQuat idAngles::ToQuat( void ) const {
	float sx, cx, sy, cy, sz, cz;
	float sxcy, cxcy, sxsy, cxsy;

	idMath::SinCos( DEG2RAD( yaw ) * 0.5f, sz, cz );
	idMath::SinCos( DEG2RAD( pitch ) * 0.5f, sy, cy );
	idMath::SinCos( DEG2RAD( roll ) * 0.5f, sx, cx );

	sxcy = sx * cy;
	cxcy = cx * cy;
	sxsy = sx * sy;
	cxsy = cx * sy;

	return idQuat( cxsy*sz - sxcy*cz, -cxsy*cz - sxcy*sz, sxsy*cz - cxcy*sz, cxcy*cz + sxsy*sz );
}
Beispiel #4
0
/*
=====================
Slerp

Spherical linear interpolation between two quaternions.
=====================
*/
idQuat Slerp( const idQuat& from, const idQuat& to, const float t )
{
	return idQuat().Slerp( from, to, t );
}