コード例 #1
0
int Physics::levelContactProcess( const NewtonMaterial* p_material, const NewtonContact* /*p_contact*/ )
{
    // handle level submaterials
    unsigned int materialType = static_cast< unsigned int >( NewtonMaterialGetContactFaceAttribute( p_material ) );
    switch ( materialType )
    {
        case Physics::MAT_DEFAULT:
            NewtonMaterialSetContactElasticity( p_material, 0.3f );
            NewtonMaterialSetContactStaticFrictionCoef( p_material, 0.6f, 0 );
            NewtonMaterialSetContactKineticFrictionCoef( p_material, 0.3f, 0 );
            break;

        case Physics::MAT_WOOD:

            NewtonMaterialSetContactElasticity( p_material, 0.5f );
            NewtonMaterialSetContactStaticFrictionCoef( p_material, 0.6f, 0 );
            NewtonMaterialSetContactKineticFrictionCoef( p_material, 0.4f, 0 );
            break;

        case Physics::MAT_STONE:

            NewtonMaterialSetContactElasticity( p_material, 0.4f );
            NewtonMaterialSetContactStaticFrictionCoef( p_material, 0.55f, 0 );
            NewtonMaterialSetContactKineticFrictionCoef( p_material, 0.35f, 0 );
            break;

        case Physics::MAT_METALL:

            NewtonMaterialSetContactElasticity( p_material, 0.6f );
            NewtonMaterialSetContactStaticFrictionCoef( p_material, 0.5f, 0 );
            NewtonMaterialSetContactKineticFrictionCoef( p_material, 0.4f, 0 );
            break;

        case Physics::MAT_GRASS:

            NewtonMaterialSetContactElasticity( p_material, 0.4f );
            NewtonMaterialSetContactStaticFrictionCoef( p_material, 0.8f, 0 );
            NewtonMaterialSetContactKineticFrictionCoef( p_material, 0.6f, 0 );
            break;

        case Physics::MAT_WALL:

            NewtonMaterialSetContactElasticity( p_material, 0.8f );
            NewtonMaterialSetContactStaticFrictionCoef( p_material, 0.1f, 0 );
            NewtonMaterialSetContactKineticFrictionCoef( p_material, 0.1f, 0 );
            break;

        // simply return 0 for non-colliding pairs
        case Physics::MAT_NOCOL:
            return 0;
            break;

        default:
            ;
    }

    return 1;
}
コード例 #2
0
ファイル: material.cpp プロジェクト: fathat/pynewton
void Material::SetContactKineticFrictionCoef ( dFloat coef, int index)
{
    NewtonMaterialSetContactKineticFrictionCoef( m_material, coef, index );
}
コード例 #3
0
ファイル: PhysicsActor.hpp プロジェクト: SgtFlame/indiezen
 virtual void setKineticFrictionCoefficient(Math::Real _coefficent, bool _primary = true)
 {
     NewtonMaterialSetContactKineticFrictionCoef(m_pMaterial, _coefficent, _primary ? 0 : 1);
 }