ammo.js icon indicating copy to clipboard operation
ammo.js copied to clipboard

How to identify body in ammoContactPairTestCallback.addSingleResult?

Open ValSergey opened this issue 9 years ago • 1 comments

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);

ValSergey avatar Nov 12 '16 12:11 ValSergey

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

suddenly4 avatar Dec 18 '24 09:12 suddenly4