/** This routine is basically determining the gridpoint indices for a given input vector, answering the question: "which gridpoint is closest to the provided point?". "with clamp" means that we restrict the point to be in the heightfield's axis-aligned bounding box. */ void btHeightfieldTerrainShape::quantizeWithClamp(int* out, const btVector3& point,int /*isMax*/) const { btVector3 clampedPoint(point); clampedPoint.setMax(m_localAabbMin); clampedPoint.setMin(m_localAabbMax); out[0] = getQuantized(clampedPoint.getX()); out[1] = getQuantized(clampedPoint.getY()); out[2] = getQuantized(clampedPoint.getZ()); }
void btHeightfieldTerrainShape::quantizeWithClamp(int* out, const btVector3& point,int /*isMax*/) const { btVector3 clampedPoint(point); clampedPoint.setMax(m_localAabbMin); clampedPoint.setMin(m_localAabbMax); btVector3 v = (clampedPoint);// - m_bvhAabbMin) * m_bvhQuantization; //TODO: optimization: check out how to removed this btFabs out[0] = (int)(v.getX() + v.getX() / btFabs(v.getX())* btScalar(0.5) ); out[1] = (int)(v.getY() + v.getY() / btFabs(v.getY())* btScalar(0.5) ); out[2] = (int)(v.getZ() + v.getZ() / btFabs(v.getZ())* btScalar(0.5) ); }
void AxisSweep3::Quantize(unsigned short* out, const SimdPoint3& point, int isMax) const { SimdPoint3 clampedPoint(point); /* if (isMax) clampedPoint += SimdVector3(10,10,10); else { clampedPoint -= SimdVector3(10,10,10); } */ clampedPoint.setMax(m_worldAabbMin); clampedPoint.setMin(m_worldAabbMax); SimdVector3 v = (clampedPoint - m_worldAabbMin) * m_quantize; out[0] = (unsigned short)(((int)v.getX() & 0xfffc) | isMax); out[1] = (unsigned short)(((int)v.getY() & 0xfffc) | isMax); out[2] = (unsigned short)(((int)v.getZ() & 0xfffc) | isMax); }