PxVehicleComponents.h

Go to the documentation of this file.
00001 //
00002 // Redistribution and use in source and binary forms, with or without
00003 // modification, are permitted provided that the following conditions
00004 // are met:
00005 //  * Redistributions of source code must retain the above copyright
00006 //    notice, this list of conditions and the following disclaimer.
00007 //  * Redistributions in binary form must reproduce the above copyright
00008 //    notice, this list of conditions and the following disclaimer in the
00009 //    documentation and/or other materials provided with the distribution.
00010 //  * Neither the name of NVIDIA CORPORATION nor the names of its
00011 //    contributors may be used to endorse or promote products derived
00012 //    from this software without specific prior written permission.
00013 //
00014 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
00015 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00016 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00017 // PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
00018 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00019 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00020 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00021 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
00022 // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00023 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00024 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00025 //
00026 // Copyright (c) 2008-2018 NVIDIA Corporation. All rights reserved.
00027 // Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
00028 // Copyright (c) 2001-2004 NovodeX AG. All rights reserved.  
00029 
00030 #ifndef PX_VEHICLE_CORE_COMPONENTS_H
00031 #define PX_VEHICLE_CORE_COMPONENTS_H
00032 
00036 #include "foundation/PxMemory.h"
00037 #include "foundation/PxVec3.h"
00038 #include "common/PxCoreUtilityTypes.h"
00039 #include "PxVehicleSDK.h"
00040 #include "common/PxTypeInfo.h"
00041 
00042 #if !PX_DOXYGEN
00043 namespace physx
00044 {
00045 #endif
00046 
00047 class PxVehicleChassisData
00048 {
00049 public:
00050 
00051     friend class PxVehicleDriveSimData4W;
00052 
00053     PxVehicleChassisData()
00054         :   mMOI(PxVec3(0,0,0)),
00055             mMass(1500),
00056             mCMOffset(PxVec3(0,0,0))
00057     {
00058     }
00059 
00065     PxVec3 mMOI;
00066 
00072     PxReal mMass;
00073 
00079     PxVec3 mCMOffset;
00080 
00081 private:
00082 
00083     PxReal pad;
00084 
00085     bool isValid() const;
00086 };
00087 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleChassisData)& 0x0f));
00088 
00089 class PxVehicleEngineData
00090 {
00091 public:
00092 
00093     friend class PxVehicleDriveSimData;
00094     
00095     enum
00096     {
00097         eMAX_NB_ENGINE_TORQUE_CURVE_ENTRIES = 8
00098     };
00099 
00100     PxVehicleEngineData()
00101         :   mMOI(1.0f),
00102             mPeakTorque(500.0f),
00103             mMaxOmega(600.0f),
00104             mDampingRateFullThrottle(0.15f),
00105             mDampingRateZeroThrottleClutchEngaged(2.0f),
00106             mDampingRateZeroThrottleClutchDisengaged(0.35f)
00107     {
00108         mTorqueCurve.addPair(0.0f, 0.8f);
00109         mTorqueCurve.addPair(0.33f, 1.0f);
00110         mTorqueCurve.addPair(1.0f, 0.8f);
00111 
00112         mRecipMOI=1.0f/mMOI;
00113         mRecipMaxOmega=1.0f/mMaxOmega;
00114     }
00115 
00121     PxFixedSizeLookupTable<eMAX_NB_ENGINE_TORQUE_CURVE_ENTRIES> mTorqueCurve;
00122 
00128     PxReal mMOI;
00129 
00139     PxReal mPeakTorque;
00140 
00148     PxReal mMaxOmega;
00149 
00165     PxReal mDampingRateFullThrottle;
00166 
00167 
00183     PxReal mDampingRateZeroThrottleClutchEngaged;
00184 
00200     PxReal mDampingRateZeroThrottleClutchDisengaged;
00201 
00205     PX_FORCE_INLINE PxReal getRecipMOI() const {return mRecipMOI;}
00206 
00210     PX_FORCE_INLINE PxReal getRecipMaxOmega() const {return mRecipMaxOmega;}
00211 
00212 private:
00213 
00221     PxReal mRecipMOI;
00222 
00230     PxReal mRecipMaxOmega;
00231 
00232     bool isValid() const;
00233 
00234 
00235 //serialization
00236 public:
00237     PxVehicleEngineData(const PxEMPTY) : mTorqueCurve(PxEmpty) {}
00238 //~serialization
00239 };
00240 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleEngineData)& 0x0f));
00241 
00242 class PxVehicleGearsData
00243 {
00244 public:
00245 
00246     friend class PxVehicleDriveSimData;
00247 
00248     enum Enum
00249     {
00250         eREVERSE=0,
00251         eNEUTRAL,
00252         eFIRST,
00253         eSECOND,
00254         eTHIRD,
00255         eFOURTH,
00256         eFIFTH,
00257         eSIXTH,
00258         eSEVENTH,
00259         eEIGHTH,
00260         eNINTH,
00261         eTENTH,
00262         eELEVENTH,
00263         eTWELFTH,
00264         eTHIRTEENTH,
00265         eFOURTEENTH,
00266         eFIFTEENTH,
00267         eSIXTEENTH,
00268         eSEVENTEENTH,
00269         eEIGHTEENTH,
00270         eNINETEENTH,
00271         eTWENTIETH,
00272         eTWENTYFIRST,
00273         eTWENTYSECOND,
00274         eTWENTYTHIRD,
00275         eTWENTYFOURTH,
00276         eTWENTYFIFTH,
00277         eTWENTYSIXTH,
00278         eTWENTYSEVENTH,
00279         eTWENTYEIGHTH,
00280         eTWENTYNINTH,
00281         eTHIRTIETH,
00282         eGEARSRATIO_COUNT
00283     };
00284 
00285     PxVehicleGearsData()
00286         :   mFinalRatio(4.0f),
00287             mNbRatios(7),
00288             mSwitchTime(0.5f)
00289     {
00290         mRatios[PxVehicleGearsData::eREVERSE]=-4.0f;
00291         mRatios[PxVehicleGearsData::eNEUTRAL]=0.0f;
00292         mRatios[PxVehicleGearsData::eFIRST]=4.0f;
00293         mRatios[PxVehicleGearsData::eSECOND]=2.0f;
00294         mRatios[PxVehicleGearsData::eTHIRD]=1.5f;
00295         mRatios[PxVehicleGearsData::eFOURTH]=1.1f;
00296         mRatios[PxVehicleGearsData::eFIFTH]=1.0f;
00297         
00298         for(PxU32 i = PxVehicleGearsData::eSIXTH; i < PxVehicleGearsData::eGEARSRATIO_COUNT; ++i)
00299             mRatios[i]=0.f;
00300     }
00301     
00307     PxReal mRatios[PxVehicleGearsData::eGEARSRATIO_COUNT];
00308 
00314     PxReal mFinalRatio;
00315 
00321     PxU32 mNbRatios;
00322     
00330     PxReal mSwitchTime;
00331     
00332 private:
00333 
00334     PxReal mPad;
00335 
00336     bool isValid() const;
00337 
00338 //serialization
00339 public:
00340     PxVehicleGearsData(const PxEMPTY) {}
00341     PxReal getGearRatio(PxVehicleGearsData::Enum a)  const {return mRatios[a];}
00342     void setGearRatio(PxVehicleGearsData::Enum a, PxReal ratio)   { mRatios[a] = ratio;}
00343 //~serialization
00344 };
00345 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleGearsData)& 0x0f));
00346 
00347 class PxVehicleAutoBoxData
00348 {
00349 public:
00350 
00351     friend class PxVehicleDriveSimData;
00352 
00353     PxVehicleAutoBoxData()
00354     {
00355         for(PxU32 i=0;i<PxVehicleGearsData::eGEARSRATIO_COUNT;i++)
00356         {
00357             mUpRatios[i]=0.65f;
00358             mDownRatios[i]=0.50f;
00359         }
00360         //Not sure how important this is but we want to kick out of neutral very quickly.
00361         mUpRatios[PxVehicleGearsData::eNEUTRAL]=0.15f;
00362         //Set the latency time in an unused element of one of the arrays.
00363         mDownRatios[PxVehicleGearsData::eREVERSE]=2.0f; 
00364     }
00365     
00374     PxReal mUpRatios[PxVehicleGearsData::eGEARSRATIO_COUNT];
00375 
00384     PxReal mDownRatios[PxVehicleGearsData::eGEARSRATIO_COUNT];
00385 
00397     void setLatency(const PxReal latency) 
00398     { 
00399         mDownRatios[PxVehicleGearsData::eREVERSE]=latency;
00400     }
00401 
00409     PxReal getLatency() const 
00410     { 
00411         return mDownRatios[PxVehicleGearsData::eREVERSE];
00412     }
00413 
00414 private:
00415     bool isValid() const;
00416 
00417 //serialization
00418 public:
00419     PxVehicleAutoBoxData(const PxEMPTY) {}
00420     
00421     PxReal getUpRatios(PxVehicleGearsData::Enum a)  const {return mUpRatios[a];}
00422     void setUpRatios(PxVehicleGearsData::Enum a, PxReal ratio)   { mUpRatios[a] = ratio;}
00423 
00424     PxReal getDownRatios(PxVehicleGearsData::Enum a)  const {return mDownRatios[a];}
00425     void setDownRatios(PxVehicleGearsData::Enum a, PxReal ratio)   { mDownRatios[a] = ratio;}
00426 //~serialization
00427 };
00428 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleAutoBoxData)& 0x0f));
00429 
00430 class PxVehicleDifferential4WData
00431 {
00432 public:
00433 
00434     friend class PxVehicleDriveSimData4W;
00435 
00436     enum Enum
00437     {
00438         eDIFF_TYPE_LS_4WD,          //limited slip differential for car with 4 driven wheels
00439         eDIFF_TYPE_LS_FRONTWD,      //limited slip differential for car with front-wheel drive
00440         eDIFF_TYPE_LS_REARWD,       //limited slip differential for car with rear-wheel drive
00441         eDIFF_TYPE_OPEN_4WD,        //open differential for car with 4 driven wheels 
00442         eDIFF_TYPE_OPEN_FRONTWD,    //open differential for car with front-wheel drive
00443         eDIFF_TYPE_OPEN_REARWD,     //open differential for car with rear-wheel drive
00444         eMAX_NB_DIFF_TYPES
00445     };
00446 
00447     PxVehicleDifferential4WData()
00448         :   mFrontRearSplit(0.45f),
00449             mFrontLeftRightSplit(0.5f),
00450             mRearLeftRightSplit(0.5f),
00451             mCentreBias(1.3f),
00452             mFrontBias(1.3f),
00453             mRearBias(1.3f),
00454             mType(PxVehicleDifferential4WData::eDIFF_TYPE_LS_4WD)
00455     {
00456     }
00457 
00465     PxReal mFrontRearSplit;
00466 
00474     PxReal mFrontLeftRightSplit;
00475 
00483     PxReal mRearLeftRightSplit;
00484 
00493     PxReal mCentreBias;
00494 
00503     PxReal mFrontBias;
00504 
00513     PxReal mRearBias;
00514 
00520     PxVehicleDifferential4WData::Enum mType;
00521 
00522 private:
00523 
00524     PxReal mPad[1];
00525 
00526     bool isValid() const;
00527 
00528 //serialization
00529 public:
00530     PxVehicleDifferential4WData(const PxEMPTY) {}
00531 //~serialization
00532 };
00533 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleDifferential4WData)& 0x0f));
00534 
00535 class PxVehicleDifferentialNWData
00536 {
00537 public:
00538 
00539     friend class PxVehicleDriveSimDataNW;
00540     friend class PxVehicleUpdate;
00541 
00542     PxVehicleDifferentialNWData()
00543     {
00544         PxMemSet(mBitmapBuffer, 0, sizeof(PxU32) * (((PX_MAX_NB_WHEELS + 31) & ~31) >> 5));
00545         mNbDrivenWheels=0;
00546         mInvNbDrivenWheels=0.0f;
00547     }
00548 
00556     void setDrivenWheel(const PxU32 wheelId, const bool drivenState);
00557 
00561     bool getIsDrivenWheel(const PxU32 wheelId) const;
00562 
00563 private:
00564 
00565     PxU32 mBitmapBuffer[((PX_MAX_NB_WHEELS + 31) & ~31) >> 5];
00566     PxU32 mNbDrivenWheels;
00567     PxReal mInvNbDrivenWheels;
00568     PxU32 mPad;
00569 
00570     bool isValid() const;
00571 
00572 //serialization
00573 public:
00574     PxVehicleDifferentialNWData(const PxEMPTY) {}
00575     PxU32 getDrivenWheelStatus() const;
00576     void setDrivenWheelStatus(PxU32 status);
00577 //~serialization
00578 };
00579 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleDifferentialNWData)& 0x0f));
00580 
00581 
00582 class PxVehicleAckermannGeometryData
00583 {
00584 public:
00585 
00586     friend class PxVehicleDriveSimData4W;
00587 
00588     PxVehicleAckermannGeometryData()
00589         :   mAccuracy(1.0f),
00590             mFrontWidth(0.0f),      //Must be filled out 
00591             mRearWidth(0.0f),       //Must be filled out
00592             mAxleSeparation(0.0f)   //Must be filled out
00593     {
00594     }
00595 
00611     PxReal mAccuracy;
00612 
00620     PxReal mFrontWidth;     
00621 
00629     PxReal mRearWidth;      
00630 
00638     PxReal mAxleSeparation; 
00639 
00640 private:
00641 
00642     bool isValid() const;
00643 
00644 //serialization
00645 public:
00646     PxVehicleAckermannGeometryData(const PxEMPTY) {}
00647 //~serialization
00648 };
00649 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleAckermannGeometryData)& 0x0f));
00650 
00655 struct PxVehicleClutchAccuracyMode
00656 {
00657     enum Enum
00658     {
00659         eESTIMATE = 0,
00660         eBEST_POSSIBLE
00661     };
00662 };
00663 
00664 class PxVehicleClutchData
00665 {
00666 public:
00667 
00668     friend class PxVehicleDriveSimData;
00669 
00670     PxVehicleClutchData()
00671         :   mStrength(10.0f),
00672             mAccuracyMode(PxVehicleClutchAccuracyMode::eBEST_POSSIBLE),
00673             mEstimateIterations(5)
00674     {
00675     }
00676 
00695     PxReal mStrength;
00696 
00711     PxVehicleClutchAccuracyMode::Enum mAccuracyMode;
00712 
00724     PxU32 mEstimateIterations;
00725 
00726 private:
00727 
00728     PxU8 mPad[4];
00729 
00730     bool isValid() const;
00731 
00732 //serialization
00733 public:
00734     PxVehicleClutchData(const PxEMPTY) {}
00735 //~serialization
00736 };
00737 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleClutchData)& 0x0f));
00738 
00739 
00762 class PxVehicleTireLoadFilterData
00763 {
00764 public:
00765 
00766     friend class PxVehicleWheelsSimData;
00767 
00768     PxVehicleTireLoadFilterData()
00769         :   mMinNormalisedLoad(0),
00770             mMinFilteredNormalisedLoad(0.2308f),
00771             mMaxNormalisedLoad(3.0f),
00772             mMaxFilteredNormalisedLoad(3.0f)
00773     {
00774         mDenominator=1.0f/(mMaxNormalisedLoad - mMinNormalisedLoad);
00775     }
00776 
00780     PxReal mMinNormalisedLoad; 
00781 
00785     PxReal mMinFilteredNormalisedLoad; 
00786 
00790     PxReal mMaxNormalisedLoad;
00791         
00795     PxReal mMaxFilteredNormalisedLoad;
00796 
00797     PX_FORCE_INLINE PxReal getDenominator() const {return mDenominator;}
00798 
00799 private:
00800 
00804     //1.0f/(mMaxNormalisedLoad-mMinNormalisedLoad) for quick calculations
00805     PxReal mDenominator;
00806 
00807     PxU32 mPad[3];
00808 
00809     bool isValid() const;
00810 
00811 //serialization
00812 public:
00813     PxVehicleTireLoadFilterData(const PxEMPTY) {}
00814 //~serialization
00815 };
00816 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleTireLoadFilterData)& 0x0f));
00817 
00818 class PxVehicleWheelData
00819 {
00820 public:
00821 
00822     friend class PxVehicleWheels4SimData;
00823 
00824     PxVehicleWheelData()
00825         :   mRadius(0.0f),              //Must be filled out
00826             mWidth(0.0f),
00827             mMass(20.0f),
00828             mMOI(0.0f),                 //Must be filled out
00829             mDampingRate(0.25f),
00830             mMaxBrakeTorque(1500.0f),
00831             mMaxHandBrakeTorque(0.0f),  
00832             mMaxSteer(0.0f),            
00833             mToeAngle(0.0f),
00834             mRecipRadius(0.0f),         //Must be filled out
00835             mRecipMOI(0.0f)             //Must be filled out
00836     {
00837     }
00838 
00846     PxReal mRadius;
00847 
00855     PxReal mWidth;
00856 
00864     PxReal mMass;
00865 
00873     PxReal mMOI;
00874 
00882     PxReal mDampingRate;
00883 
00891     PxReal mMaxBrakeTorque;
00892 
00900     PxReal mMaxHandBrakeTorque;
00901 
00909     PxReal mMaxSteer;
00910 
00918     PxReal mToeAngle;//in radians
00919 
00925     PX_FORCE_INLINE PxReal getRecipRadius() const {return mRecipRadius;}
00926 
00932     PX_FORCE_INLINE PxReal getRecipMOI() const {return mRecipMOI;}
00933 
00934 private:
00935 
00943     PxReal mRecipRadius;
00944 
00952     PxReal mRecipMOI;
00953 
00954     PxReal mPad[1];
00955 
00956     bool isValid() const;
00957 };
00958 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleWheelData)& 0x0f));
00959 
00960 class PxVehicleSuspensionData
00961 {
00962 public:
00963 
00964     friend class PxVehicleWheels4SimData;
00965 
00966     PxVehicleSuspensionData()
00967         :   mSpringStrength(0.0f),
00968             mSpringDamperRate(0.0f),
00969             mMaxCompression(0.3f),
00970             mMaxDroop(0.1f),
00971             mSprungMass(0.0f),
00972             mCamberAtRest(0.0f),
00973             mCamberAtMaxCompression(0.0f),
00974             mCamberAtMaxDroop(0.0f),
00975             mRecipMaxCompression(1.0f),
00976             mRecipMaxDroop(1.0f)
00977     {
00978     }
00979     
00987     PxReal mSpringStrength;
00988 
00996     PxReal mSpringDamperRate;
00997 
01005     PxReal mMaxCompression;
01006 
01014     PxReal mMaxDroop;
01015 
01047     PxReal mSprungMass;
01048 
01057     PxReal mCamberAtRest;
01058 
01069     PxReal mCamberAtMaxCompression; 
01070 
01081     PxReal mCamberAtMaxDroop; 
01082 
01090     PX_FORCE_INLINE PxReal getRecipMaxCompression() const {return mRecipMaxCompression;}
01091 
01099     PX_FORCE_INLINE PxReal getRecipMaxDroop() const {return mRecipMaxDroop;}
01100 
01106     void setMassAndPreserveNaturalFrequency(const PxReal newSprungMass)
01107     {
01108         const PxF32 oldStrength = mSpringStrength;
01109         const PxF32 oldSprungMass = mSprungMass;
01110         const PxF32 newStrength = oldStrength * (newSprungMass / oldSprungMass);
01111         mSpringStrength = newStrength;
01112         mSprungMass = newSprungMass;
01113     }
01114 
01115 private:
01116 
01122     PxReal mRecipMaxCompression;
01123 
01129     PxReal mRecipMaxDroop;
01130 
01131     //padding
01132     PxReal mPad[2];
01133 
01134     bool isValid() const;
01135 };
01136 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleSuspensionData)& 0x0f));
01137 
01138 class PxVehicleAntiRollBarData
01139 {
01140 public:
01141 
01142     friend class PxVehicleWheelsSimData;
01143 
01144     PxVehicleAntiRollBarData()
01145         : mWheel0(0xffffffff),
01146           mWheel1(0xffffffff),
01147           mStiffness(0.0f)
01148     {
01149     }
01150 
01151     /*
01152     \brief The anti-roll bar connects two wheels with indices mWheel0 and mWheel1
01153     */
01154     PxU32 mWheel0;
01155 
01156     /*
01157     \brief The anti-roll bar connects two wheels with indices mWheel0 and mWheel1
01158     */
01159     PxU32 mWheel1;
01160 
01161     /*
01162     \brief The stiffness of the anti-roll bar.
01163 
01164     \note Specified in kilograms per second-squared (kg s^-2).
01165 
01166     <b>Range:</b> [0, PX_MAX_F32)<br>
01167     */
01168     PxF32 mStiffness;
01169 
01170 private:
01171 
01172     PxF32 mPad[1];
01173 
01174     bool isValid() const;
01175 };
01176 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleAntiRollBarData)& 0x0f));
01177 
01178 class PxVehicleTireData
01179 {
01180 public:
01181     friend class PxVehicleWheels4SimData;
01182 
01183     PxVehicleTireData()
01184         :   mLatStiffX(2.0f),
01185             mLatStiffY(0.3125f*(180.0f / PxPi)),
01186             mLongitudinalStiffnessPerUnitGravity(1000.0f),
01187             mCamberStiffnessPerUnitGravity(0.1f*(180.0f / PxPi)),
01188             mType(0)
01189     {
01190         mFrictionVsSlipGraph[0][0]=0.0f;
01191         mFrictionVsSlipGraph[0][1]=1.0f;
01192         mFrictionVsSlipGraph[1][0]=0.1f;
01193         mFrictionVsSlipGraph[1][1]=1.0f;
01194         mFrictionVsSlipGraph[2][0]=1.0f;
01195         mFrictionVsSlipGraph[2][1]=1.0f;
01196 
01197         mRecipLongitudinalStiffnessPerUnitGravity=1.0f/mLongitudinalStiffnessPerUnitGravity;
01198 
01199         mFrictionVsSlipGraphRecipx1Minusx0=1.0f/(mFrictionVsSlipGraph[1][0]-mFrictionVsSlipGraph[0][0]);
01200         mFrictionVsSlipGraphRecipx2Minusx1=1.0f/(mFrictionVsSlipGraph[2][0]-mFrictionVsSlipGraph[1][0]);
01201     }
01202 
01210     PxReal mLatStiffX;
01211 
01227     PxReal mLatStiffY;
01228 
01240     PxReal mLongitudinalStiffnessPerUnitGravity;
01241 
01253     PxReal mCamberStiffnessPerUnitGravity;
01254 
01288     PxReal mFrictionVsSlipGraph[3][2];
01289 
01297     PxU32 mType;
01298 
01304     PX_FORCE_INLINE PxReal getRecipLongitudinalStiffnessPerUnitGravity() const {return mRecipLongitudinalStiffnessPerUnitGravity;}
01305 
01311     PX_FORCE_INLINE PxReal getFrictionVsSlipGraphRecipx1Minusx0() const {return mFrictionVsSlipGraphRecipx1Minusx0;}
01312 
01318     PX_FORCE_INLINE PxReal getFrictionVsSlipGraphRecipx2Minusx1() const {return mFrictionVsSlipGraphRecipx2Minusx1;}
01319 
01320 private:
01321 
01329     PxReal mRecipLongitudinalStiffnessPerUnitGravity;
01330 
01338     PxReal mFrictionVsSlipGraphRecipx1Minusx0;
01339 
01347     PxReal mFrictionVsSlipGraphRecipx2Minusx1;
01348 
01349     PxReal mPad[2];
01350 
01351     bool isValid() const;
01352 };
01353 PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleTireData)& 0x0f));
01354 #if !PX_DOXYGEN
01355 } // namespace physx
01356 #endif
01357 
01359 #endif //PX_VEHICLE_CORE_COMPONENTS_H


Copyright © 2008-2018 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved. www.nvidia.com