Пример #1
0
	bool MountMg42::_GetMG42Properties()
	{
		ETQW_MG42Info data;
		if ( !InterfaceFuncs::GetMg42Properties( GetClient(), data ) )
			return false;

		mGunCenterArc = Vector3f( data.mCenterFacing );

		mMinHorizontalArc = data.mMinHorizontalArc;
		mMaxHorizontalArc = data.mMaxHorizontalArc;
		mMinVerticalArc = data.mMinVerticalArc;
		mMaxVerticalArc = data.mMaxVerticalArc;

		// Calculate the planes for the MG42

		/*Matrix3f planeMatrices[4];
		planeMatrices[0].FromEulerAnglesXYZ(.mMinHorizontalArc, 0.0f, 0.0f);
		planeMatrices[1].FromEulerAnglesXYZ(.mMaxHorizontalArc, 0.0f, 0.0f);
		planeMatrices[2].FromEulerAnglesXYZ(0.0f, mMinHorizontalArc, 0.0f);
		planeMatrices[3].FromEulerAnglesXYZ(0.0f, mMaxHorizontalArc, 0.0f);

		mGunArcPlanes[0] = Plane3f(.mGunCenterArc * planeMatrices[0], mMG42Position);
		mGunArcPlanes[1] = Plane3f(.mGunCenterArc * planeMatrices[1], mMG42Position);
		mGunArcPlanes[2] = Plane3f(.mGunCenterArc * planeMatrices[2], mMG42Position);
		mGunArcPlanes[3] = Plane3f(.mGunCenterArc * planeMatrices[3], mMG42Position);*/

		const float fScanPc = 0.4f;

		Quaternionf ql;
		ql.FromAxisAngle( Vector3f::UNIT_Z, Mathf::DegToRad( mMinHorizontalArc * fScanPc ) );
		mScanLeft = ql.Rotate( mGunCenterArc );

		Quaternionf qr;
		qr.FromAxisAngle( Vector3f::UNIT_Z, Mathf::DegToRad( mMaxHorizontalArc * fScanPc ) );
		mScanRight = qr.Rotate( mGunCenterArc );

		return true;
	}
void Trackball::Translate(Point3f tr)
{
    Quaternionf irot = track.rot;
    irot.Invert();
    track.tra = last_track.tra + irot.Rotate(tr)/track.sca;
}