当前位置: 首页>>代码示例>>C++>>正文


C++ Space::performRayCast方法代码示例

本文整理汇总了C++中Space::performRayCast方法的典型用法代码示例。如果您正苦于以下问题:C++ Space::performRayCast方法的具体用法?C++ Space::performRayCast怎么用?C++ Space::performRayCast使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Space的用法示例。


在下文中一共展示了Space::performRayCast方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: dJointDestroy

/* ....................................................................... */
void
CharacterBase:: _collideAgainstGround(ooReal step_size)
{
    (void) step_size ;


    //
    // Destroy contact joint
    //
    if( m_foot_contact_joint ) {

        dJointDestroy( m_foot_contact_joint ) ;

        m_foot_contact_joint = NULL ;

    }




    if( ! m_body.valid() ) {
        return ;
    }






    PS_ASSERT1( m_body->getWorld() ) ;
    PS_ASSERT1( m_body->getWorld()->asSpace() ) ;




    Space*  space = m_body->getWorld()->asSpace() ;




    const osg::Vec3     ray_from = m_body->getPosition() ;
    const osg::Vec3     ray_to = ray_from - m_up_versor * m_height ;





    m_foot_ray_cast_result->reset() ;
    m_foot_ray_cast_result->setMe( m_body->asCollidable() ) ;

    space->performRayCast( ray_from, ray_to, m_foot_ray_cast_result.get(), 4 ) ;

    m_is_on_ground = m_foot_ray_cast_result->hasHit() ;



    if( m_is_on_ground ) {


        const Collidable*   collidable = m_foot_ray_cast_result->getCollidable() ;
        PS_ASSERT1( collidable != NULL ) ;




        dContact    contact ;

        contact.surface.mode = dContactApprox1 | dContactFDir1 | dContactMu2 | dContactSoftERP | dContactSoftCFM ;


        // ??
        contact.surface.mu = 0.0 ;
        contact.surface.mu2 = m_body->getMass() * 2.0e-2 ;




#if 1
        const osgODE::CollisionParameters*  cp = collidable->getCollisionParameters() ;

        if( cp ) {
            contact.surface.mu2 = cp->getMu() ;

            m_motion_fmax_mult = osg::clampTo( cp->getMu(), (ooReal)0.0, (ooReal)1.0 ) ;

            m_motion_fmax_mult = pow( m_motion_fmax_mult, 0.125 ) ;

        } else {

            m_motion_fmax_mult = 1.0 ;

        }
#endif



        if( m_motion_velocity.length2() < 1.0e-6 ) {
            contact.surface.mu = contact.surface.mu2 ;
        }
//.........这里部分代码省略.........
开发者ID:novichiv,项目名称:osgode,代码行数:101,代码来源:CharacterBase.cpp


注:本文中的Space::performRayCast方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。