How to identify body in ammoContactPairTestCallback.addSingleResult?
Hello.
ammoContactPairTestCallback.addSingleResult = function (cp, colObj0, partid0, index0, colObj1, partid1, index1) {
var body_c1 = Ammo.wrapPointer(colObj0.ptr, Ammo.btCollisionObject);
var body_c2 = Ammo.wrapPointer(colObj1.ptr, Ammo.btCollisionObject);
var rbody1 = Ammo.btRigidBody.prototype.upcast(body_c1);
var rbody2 = Ammo.btRigidBody.prototype.upcast(body_c2);
if (rbody1 === body) <---- did not work
console.log("overlap");
};
........ physicsWorld.contactPairTest(body, body1, ammoContactPairTestCallback);
When you make new shape you may add some name/ tag for example: your3dmesh.name = "your3dmesh"; your3dmesh.userData.tag = "your3dmesh"; .... const body = new Ammo.btRigidBody(rbInfo); your3dmesh.userData.physicsBody = body; body.threeObject = your3dmesh;
When you get some body, you get his property - .name // or tag by .userData.physicsBody.threeObject or your3dmesh.userData.physicsBody
let arrCollide = []; // global
Ammo().then(function (AmmoLib) { Ammo = AmmoLib; init(); animate(); }); function init() { initGraphics(); initPhysics(); setupContactResultCallbackToTrisesShape() }
setupContactResultCallbackToTrisesShape(); // initi function setupContactResultCallbackToTrisesShape(){ cbContactResultTrises = new Ammo.ConcreteContactResultCallback(); cbContactResultTrises.addSingleResult = function(cp, colObj0Wrap, partId0, index0, colObj1Wrap, partId1, index1){ let contactPoint = Ammo.wrapPointer(cp, Ammo.btManifoldPoint); const distance = contactPoint.getDistance();
if (distance > 0) return; let colWrapper0 = Ammo.wrapPointer(colObj0Wrap, Ammo.btCollisionObjectWrapper); let rb0 = Ammo.castObject(colWrapper0.getCollisionObject(), Ammo.btRigidBody);
let colWrapper1 = Ammo.wrapPointer(colObj1Wrap, Ammo.btCollisionObjectWrapper); let rb1 = Ammo.castObject(colWrapper1.getCollisionObject(), Ammo.btRigidBody);
let threeObject0 = rb0.threeObject; let threeObject1 = rb1.threeObject;
let locApoint = contactPoint.get_m_localPointA(); let locApos = contactPoint.get_m_positionWorldOnA();
let locBpoint = contactPoint.get_m_localPointB(); let locBpos = contactPoint.get_m_positionWorldOnB();
arrCollide.push({ rb0, rb1 }); // видит физ. тела, точки касания... но не видит меш, т.к. то треугольник return arrCollidesTrises; } }
function check() { physicsWorld.contactTest(your3dmesh.userData.physicsBody, cbContactResultTrises); }
function callCheck() { check(); console.log(arrCollidesTrises); arrCollide = []; }
// run callCheck() when all ready