HAVOK如何处理挖洞处的碰撞问题
2015-08-14 21:43
441 查看
首先对于山洞类型的shape(一般是CollectionShape),重载接口getCollisionFilterInfo
例如:
[cpp] view
plaincopy
hkUint32 getCollisionFilterInfo( hkpShapeKey key ) const
{
// look up whether there is a hole at x/z using the bitmask
int x = getXFromShapeKey(key) >> m_iTileSamplesX;
int y = getZFromShapeKey(key) >> m_iTileSamplesY;
bool bIsHole = m_TileHoleMask.IsBitSet(x+y*m_iStrideX);
return bIsHole ? m_iNonCollide : m_iCollide;
}
对于射线查询,可以通过hkpShapeRayCastCollectorOutput,这个的属性m_extraInfo,获得对应的shapekey
获得对应的shape后就可以通过getCollisonFilterInfo()来知道碰撞的shape是否为山洞了
例如:
[cpp] view
plaincopy
if( col && col->getCollisionFilterInfo( hitInfo.m_extraInfo )
[cpp] view
plaincopy
<span style="white-space:pre"> </span>== hkpGroupFilter::calcFilterInfo( TERRAIN_HOLE_BITMASK ) )
{
return;
}
例如:
[cpp] view
plaincopy
hkUint32 getCollisionFilterInfo( hkpShapeKey key ) const
{
// look up whether there is a hole at x/z using the bitmask
int x = getXFromShapeKey(key) >> m_iTileSamplesX;
int y = getZFromShapeKey(key) >> m_iTileSamplesY;
bool bIsHole = m_TileHoleMask.IsBitSet(x+y*m_iStrideX);
return bIsHole ? m_iNonCollide : m_iCollide;
}
对于射线查询,可以通过hkpShapeRayCastCollectorOutput,这个的属性m_extraInfo,获得对应的shapekey
获得对应的shape后就可以通过getCollisonFilterInfo()来知道碰撞的shape是否为山洞了
例如:
[cpp] view
plaincopy
if( col && col->getCollisionFilterInfo( hitInfo.m_extraInfo )
[cpp] view
plaincopy
<span style="white-space:pre"> </span>== hkpGroupFilter::calcFilterInfo( TERRAIN_HOLE_BITMASK ) )
{
return;
}
相关文章推荐
- ConcurrentHashMap浅析
- list3
- HDU 1166 敌兵布阵 (线段树 单点增减, 区间求和)
- hdu 4370 0 or 1 (最短路)
- HAVOK只碰撞一个shape的一面
- CocoaPods第三方库管理 iOS
- poj-2367 Genealogical tree
- 6174问题
- hdu5024
- 进程间通信的方式
- 排序算法整理
- 第四天:内存管理-property参数
- android调用httpclient.excute报android.os.NetworkOnMainThreadException 异常处理
- Html5 Canvas笔记(1)-CanvasAppTemplate代码
- android学习之Service的笔记,里面service里有监听用户通话状态的实例
- Hibernate的一对多增改级联操作
- iOS_UIImage中 + imageNamed: 和 + imageWithContentsOfFile:两个方法的区别
- Number of 1 Bits
- 算法的时间复杂度
- hdu 1002 A + B Problem II(大正整数相加)