Logo Search packages:      
Sourcecode: blender version File versions

WheelInfo.h

/*
 * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies.
 * Erwin Coumans makes no representations about the suitability 
 * of this software for any purpose.  
 * It is provided "as is" without express or implied warranty.
*/
#ifndef WHEEL_INFO_H
#define WHEEL_INFO_H

#include "SimdVector3.h"
#include "SimdTransform.h"

class RigidBody;

struct WheelInfoConstructionInfo
{
      SimdVector3 m_chassisConnectionCS;
      SimdVector3 m_wheelDirectionCS;
      SimdVector3 m_wheelAxleCS;
      SimdScalar  m_suspensionRestLength;
      SimdScalar  m_maxSuspensionTravelCm;
      SimdScalar  m_wheelRadius;
      
      float       m_suspensionStiffness;
      float       m_wheelsDampingCompression;
      float       m_wheelsDampingRelaxation;
      float       m_frictionSlip;
      bool m_bIsFrontWheel;
      
};

/// WheelInfo contains information per wheel about friction and suspension.
00037 struct WheelInfo
{
      struct RaycastInfo
      {
            //set by raycaster
            SimdVector3 m_contactNormalWS;//contactnormal
            SimdVector3 m_contactPointWS;//raycast hitpoint
            SimdScalar  m_suspensionLength;
            SimdVector3 m_hardPointWS;//raycast starting point
            SimdVector3 m_wheelDirectionWS; //direction in worldspace
            SimdVector3 m_wheelAxleWS; // axle in worldspace
            bool        m_isInContact;
            void*       m_groundObject; //could be general void* ptr
      };

      RaycastInfo m_raycastInfo;

      SimdTransform     m_worldTransform;
      
      SimdVector3 m_chassisConnectionPointCS; //const
      SimdVector3 m_wheelDirectionCS;//const
      SimdVector3 m_wheelAxleCS; // const or modified by steering
      SimdScalar  m_suspensionRestLength1;//const
      SimdScalar  m_maxSuspensionTravelCm;
      SimdScalar GetSuspensionRestLength() const;
      SimdScalar  m_wheelsRadius;//const
      SimdScalar  m_suspensionStiffness;//const
      SimdScalar  m_wheelsDampingCompression;//const
      SimdScalar  m_wheelsDampingRelaxation;//const
      SimdScalar  m_frictionSlip;
      SimdScalar  m_steering;
      SimdScalar  m_rotation;
      SimdScalar  m_deltaRotation;
      SimdScalar  m_rollInfluence;

      SimdScalar  m_engineForce;

      SimdScalar  m_brake;
      
      bool m_bIsFrontWheel;
      
      void*       m_clientInfo;//can be used to store pointer to sync transforms...

      WheelInfo(WheelInfoConstructionInfo& ci)

      {

            m_suspensionRestLength1 = ci.m_suspensionRestLength;
            m_maxSuspensionTravelCm = ci.m_maxSuspensionTravelCm;

            m_wheelsRadius = ci.m_wheelRadius;
            m_suspensionStiffness = ci.m_suspensionStiffness;
            m_wheelsDampingCompression = ci.m_wheelsDampingCompression;
            m_wheelsDampingRelaxation = ci.m_wheelsDampingRelaxation;
            m_chassisConnectionPointCS = ci.m_chassisConnectionCS;
            m_wheelDirectionCS = ci.m_wheelDirectionCS;
            m_wheelAxleCS = ci.m_wheelAxleCS;
            m_frictionSlip = ci.m_frictionSlip;
            m_steering = 0.f;
            m_engineForce = 0.f;
            m_rotation = 0.f;
            m_deltaRotation = 0.f;
            m_brake = 0.f;
            m_rollInfluence = 0.1f;
            m_bIsFrontWheel = ci.m_bIsFrontWheel;

      }

      void  UpdateWheel(const RigidBody& chassis,RaycastInfo& raycastInfo);

      SimdScalar  m_clippedInvContactDotSuspension;
      SimdScalar  m_suspensionRelativeVelocity;
      //calculated by suspension
      SimdScalar  m_wheelsSuspensionForce;
      SimdScalar  m_skidInfo;

};

#endif //WHEEL_INFO_H


Generated by  Doxygen 1.6.0   Back to index