So, I changed the function from:
Code: Select all
bool btPrimitiveTriangle::overlap_test_conservative(const btPrimitiveTriangle& other)
{
btScalar total_margin = m_margin + other.m_margin;
// classify points on other triangle
btScalar dis0 = bt_distance_point_plane(m_plane,other.m_vertices[0]) - total_margin;
btScalar dis1 = bt_distance_point_plane(m_plane,other.m_vertices[1]) - total_margin;
btScalar dis2 = bt_distance_point_plane(m_plane,other.m_vertices[2]) - total_margin;
if (dis0>0.0f&&dis1>0.0f&&dis2>0.0f) return false;
// classify points on this triangle
dis0 = bt_distance_point_plane(other.m_plane,m_vertices[0]) - total_margin;
dis1 = bt_distance_point_plane(other.m_plane,m_vertices[1]) - total_margin;
dis2 = bt_distance_point_plane(other.m_plane,m_vertices[2]) - total_margin;
if (dis0>0.0f&&dis1>0.0f&&dis2>0.0f) return false;
return true;
}
Code: Select all
bool btPrimitiveTriangle::overlap_test_conservative(const btPrimitiveTriangle& other)
{
btScalar total_margin = m_margin + other.m_margin;
// classify points on other triangle
btScalar dis0 = bt_distance_point_plane(m_plane,other.m_vertices[0]);
btScalar dis1 = bt_distance_point_plane(m_plane,other.m_vertices[1]);
btScalar dis2 = bt_distance_point_plane(m_plane,other.m_vertices[2]);
if (dis0>total_margin&&dis1>total_margin&&dis2>total_margin) return false;
if (dis0<-total_margin&&dis1<-total_margin&&dis2<-total_margin) return false;
// classify points on this triangle
dis0 = bt_distance_point_plane(other.m_plane,m_vertices[0]);
dis1 = bt_distance_point_plane(other.m_plane,m_vertices[1]);
dis2 = bt_distance_point_plane(other.m_plane,m_vertices[2]);
if (dis0>total_margin&&dis1>total_margin&&dis2>total_margin) return false;
if (dis0<-total_margin&&dis1<-total_margin&&dis2<-total_margin) return false;
return true;
}
Thanks!