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; }