Bullet Physics - 碰撞过滤器回调中的btHashMap性能

时间:2013-08-29 09:38:56

标签: performance callback hashmap collision-detection bulletphysics

内置的碰撞滤镜组和蒙版不足以存储碰撞滤镜回调所需的信息。

我必须使用哈希表来存储我的碰撞数据,并且由于SIMD代码优化,btHashMap也包含在库中似乎是要走的路。

检查源代码我发现在btHashMap中搜索元素取决于存储元素的数量,所以它实际上不是O(1)而是O(n)。

Value*  find(const Key& key)
{
    int index = findIndex(key);
    if (index == BT_HASH_NULL)
    {
        return NULL;
    }
    return &m_valueArray[index];
}


int findIndex(const Key& key) const
{
    unsigned int hash = key.getHash() & (m_valueArray.capacity()-1);

    if (hash >= (unsigned int)m_hashTable.size())
    {
        return BT_HASH_NULL;
    }

    int index = m_hashTable[hash];
    while ((index != BT_HASH_NULL) && key.equals(m_keyArray[index]) == false)
    {
        index = m_next[index];
    }
    return index;
}

虽然该表将存储不超过10个元素,但以这种方式使用btHashMap会不会影响性能?

0 个答案:

没有答案