vertex.indexA = proxyA.getSupport(temp); Transform.mulToOutUnsafe(transformA, proxyA.getVertex(vertex.indexA), vertex.wA); vertex.indexB = proxyB.getSupport(temp); Transform.mulToOutUnsafe(transformB, proxyB.getVertex(vertex.indexB), vertex.wB); vertex.w.set(vertex.wB).subLocal(vertex.wA);
vertex.indexA = proxyA.getSupport(temp); Transform.mulToOutUnsafe(transformA, proxyA.getVertex(vertex.indexA), vertex.wA); vertex.indexB = proxyB.getSupport(temp); Transform.mulToOutUnsafe(transformB, proxyB.getVertex(vertex.indexB), vertex.wB); vertex.w.set(vertex.wB).subLocal(vertex.wA);
vertex.indexA = proxyA.getSupport(temp); Transform.mulToOutUnsafe(transformA, proxyA.getVertex(vertex.indexA), vertex.wA); vertex.indexB = proxyB.getSupport(temp); Transform.mulToOutUnsafe(transformB, proxyB.getVertex(vertex.indexB), vertex.wB); vertex.w.set(vertex.wB).subLocal(vertex.wA);
localPointA.set(m_proxyA.getVertex(cache.indexA[0])); localPointB.set(m_proxyB.getVertex(cache.indexB[0])); Transform.mulToOutUnsafe(xfa, localPointA, pointA); Transform.mulToOutUnsafe(xfb, localPointB, pointB); localPointB1.set(m_proxyB.getVertex(cache.indexB[0])); localPointB2.set(m_proxyB.getVertex(cache.indexB[1])); Transform.mulToOutUnsafe(xfb, m_localPoint, pointB); localPointA.set(proxyA.getVertex(cache.indexA[0])); Transform.mulToOutUnsafe(xfa, localPointA, pointA); localPointA1.set(m_proxyA.getVertex(cache.indexA[0])); localPointA2.set(m_proxyA.getVertex(cache.indexA[1])); Transform.mulToOutUnsafe(xfa, m_localPoint, pointA); localPointB.set(m_proxyB.getVertex(cache.indexB[0])); Transform.mulToOutUnsafe(xfb, localPointB, pointB);
localPointA.set(m_proxyA.getVertex(cache.indexA[0])); localPointB.set(m_proxyB.getVertex(cache.indexB[0])); Transform.mulToOutUnsafe(xfa, localPointA, pointA); Transform.mulToOutUnsafe(xfb, localPointB, pointB); localPointB1.set(m_proxyB.getVertex(cache.indexB[0])); localPointB2.set(m_proxyB.getVertex(cache.indexB[1])); Transform.mulToOutUnsafe(xfb, m_localPoint, pointB); localPointA.set(proxyA.getVertex(cache.indexA[0])); Transform.mulToOutUnsafe(xfa, localPointA, pointA); localPointA1.set(m_proxyA.getVertex(cache.indexA[0])); localPointA2.set(m_proxyA.getVertex(cache.indexA[1])); Transform.mulToOutUnsafe(xfa, m_localPoint, pointA); localPointB.set(m_proxyB.getVertex(cache.indexB[0])); Transform.mulToOutUnsafe(xfb, localPointB, pointB);
localPointA.set(m_proxyA.getVertex(cache.indexA[0])); localPointB.set(m_proxyB.getVertex(cache.indexB[0])); Transform.mulToOutUnsafe(xfa, localPointA, pointA); Transform.mulToOutUnsafe(xfb, localPointB, pointB); localPointB1.set(m_proxyB.getVertex(cache.indexB[0])); localPointB2.set(m_proxyB.getVertex(cache.indexB[1])); Transform.mulToOutUnsafe(xfb, m_localPoint, pointB); localPointA.set(proxyA.getVertex(cache.indexA[0])); Transform.mulToOutUnsafe(xfa, localPointA, pointA); localPointA1.set(m_proxyA.getVertex(cache.indexA[0])); localPointA2.set(m_proxyA.getVertex(cache.indexA[1])); Transform.mulToOutUnsafe(xfa, m_localPoint, pointA); localPointB.set(m_proxyB.getVertex(cache.indexB[0])); Transform.mulToOutUnsafe(xfb, localPointB, pointB);
m_axis.negateLocal(); indexes[0] = m_proxyA.getSupport(axisA); indexes[1] = m_proxyB.getSupport(axisB); localPointA.set(m_proxyA.getVertex(indexes[0])); localPointB.set(m_proxyB.getVertex(indexes[1])); indexes[1] = m_proxyB.getSupport(axisB); localPointB.set(m_proxyB.getVertex(indexes[1])); Transform.mulToOutUnsafe(xfb, localPointB, pointB); indexes[0] = m_proxyA.getSupport(axisA); localPointA.set(m_proxyA.getVertex(indexes[0])); Transform.mulToOutUnsafe(xfa, localPointA, pointA);
m_axis.negateLocal(); indexes[0] = m_proxyA.getSupport(axisA); indexes[1] = m_proxyB.getSupport(axisB); localPointA.set(m_proxyA.getVertex(indexes[0])); localPointB.set(m_proxyB.getVertex(indexes[1])); indexes[1] = m_proxyB.getSupport(axisB); localPointB.set(m_proxyB.getVertex(indexes[1])); Transform.mulToOutUnsafe(xfb, localPointB, pointB); indexes[0] = m_proxyA.getSupport(axisA); localPointA.set(m_proxyA.getVertex(indexes[0])); Transform.mulToOutUnsafe(xfa, localPointA, pointA);
m_axis.negateLocal(); localPointA.set(m_proxyA.getVertex(indexA)); localPointB.set(m_proxyB.getVertex(indexB)); normal.negateLocal(); localPointB.set(m_proxyB.getVertex(indexB)); Transform.mulToOutUnsafe(xfb, localPointB, pointB); float separation = Vec2.dot(pointB.subLocal(pointA), normal); normal.negateLocal(); localPointA.set(m_proxyA.getVertex(indexA)); Transform.mulToOutUnsafe(xfa, localPointA, pointA);
m_axis.negateLocal(); localPointA.set(m_proxyA.getVertex(indexA)); localPointB.set(m_proxyB.getVertex(indexB)); normal.negateLocal(); localPointB.set(m_proxyB.getVertex(indexB)); Transform.mulToOutUnsafe(xfb, localPointB, pointB); float separation = Vec2.dot(pointB.subLocal(pointA), normal); normal.negateLocal(); localPointA.set(m_proxyA.getVertex(indexA)); Transform.mulToOutUnsafe(xfa, localPointA, pointA);
v.indexA = cache.indexA[i]; v.indexB = cache.indexB[i]; Vec2 wALocal = proxyA.getVertex(v.indexA); Vec2 wBLocal = proxyB.getVertex(v.indexB); Transform.mulToOutUnsafe(transformA, wALocal, v.wA); Transform.mulToOutUnsafe(transformB, wBLocal, v.wB); v.indexA = 0; v.indexB = 0; Vec2 wALocal = proxyA.getVertex(0); Vec2 wBLocal = proxyB.getVertex(0); Transform.mulToOutUnsafe(transformA, wALocal, v.wA); Transform.mulToOutUnsafe(transformB, wBLocal, v.wB);
v.indexA = cache.indexA[i]; v.indexB = cache.indexB[i]; Vec2 wALocal = proxyA.getVertex(v.indexA); Vec2 wBLocal = proxyB.getVertex(v.indexB); Transform.mulToOutUnsafe(transformA, wALocal, v.wA); Transform.mulToOutUnsafe(transformB, wBLocal, v.wB); v.indexA = 0; v.indexB = 0; Vec2 wALocal = proxyA.getVertex(0); Vec2 wBLocal = proxyB.getVertex(0); Transform.mulToOutUnsafe(transformA, wALocal, v.wA); Transform.mulToOutUnsafe(transformB, wBLocal, v.wB);
m_axis.negateLocal(); indexes[0] = m_proxyA.getSupport(axisA); indexes[1] = m_proxyB.getSupport(axisB); localPointA.set(m_proxyA.getVertex(indexes[0])); localPointB.set(m_proxyB.getVertex(indexes[1])); indexes[1] = m_proxyB.getSupport(axisB); localPointB.set(m_proxyB.getVertex(indexes[1])); Transform.mulToOutUnsafe(xfb, localPointB, pointB); indexes[0] = m_proxyA.getSupport(axisA); localPointA.set(m_proxyA.getVertex(indexes[0])); Transform.mulToOutUnsafe(xfa, localPointA, pointA);
localPointA.set(m_proxyA.getVertex(indexA)); localPointB.set(m_proxyB.getVertex(indexB)); Transform.mulToOutUnsafe(xfa, m_localPoint, pointA); localPointB.set(m_proxyB.getVertex(indexB)); Transform.mulToOutUnsafe(xfb, localPointB, pointB); float separation = Vec2.dot(pointB.subLocal(pointA), normal); Transform.mulToOutUnsafe(xfb, m_localPoint, pointB); localPointA.set(m_proxyA.getVertex(indexA)); Transform.mulToOutUnsafe(xfa, localPointA, pointA);
v.indexA = cache.indexA[i]; v.indexB = cache.indexB[i]; Vec2 wALocal = proxyA.getVertex(v.indexA); Vec2 wBLocal = proxyB.getVertex(v.indexB); Transform.mulToOutUnsafe(transformA, wALocal, v.wA); Transform.mulToOutUnsafe(transformB, wBLocal, v.wB); v.indexA = 0; v.indexB = 0; Vec2 wALocal = proxyA.getVertex(0); Vec2 wBLocal = proxyB.getVertex(0); Transform.mulToOutUnsafe(transformA, wALocal, v.wA); Transform.mulToOutUnsafe(transformB, wBLocal, v.wB);
/** * Determine if two generic shapes overlap. * * @param shapeA * @param shapeB * @param xfA * @param xfB * @return */ public final boolean testOverlap(Shape shapeA, int indexA, Shape shapeB, int indexB, Transform xfA, Transform xfB) { input.proxyA.set(shapeA, indexA); input.proxyB.set(shapeB, indexB); input.transformA.set(xfA); input.transformB.set(xfB); input.useRadii = true; cache.count = 0; pool.getDistance().distance(output, cache, input); // djm note: anything significant about 10.0f? return output.distance < 10.0f * Settings.EPSILON; }