本文整理汇总了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 ;
}
//.........这里部分代码省略.........