More info when colliding with meshes + stubbery for poking avatar.

This commit is contained in:
Andrew Meadows 2014-02-10 09:02:29 -08:00
parent 2e65592048
commit 10296577f4
5 changed files with 22 additions and 6 deletions

View file

@ -437,6 +437,20 @@ float Avatar::getHeight() const {
return extents.maximum.y - extents.minimum.y;
}
void Avatar::poke(ModelCollisionInfo& collision) {
if (collision._model == &_skeletonModel
&& collision._jointIndex != -1) {
// TODO: Andrew to make this work
printf("ADEBUG model = 0x%x joint = %d p = [%e, %e, %e]\n",
collision._model,
collision._jointIndex,
collision._contactPoint.x,
collision._contactPoint.y,
collision._contactPoint.z
);
}
}
float Avatar::getPelvisFloatingHeight() const {
return -_skeletonModel.getBindExtents().minimum.y;
}

View file

@ -126,6 +126,8 @@ public:
float getHeight() const;
void poke(ModelCollisionInfo& collision);
public slots:
void updateCollisionFlags();

View file

@ -219,16 +219,15 @@ void Hand::updateCollisions() {
// add slapback here
}
}
}
}
}
if (avatar->findSphereCollisions(palm.getPosition(), scaledPalmRadius, collisions)) {
for (size_t j = 0; j < collisions.size(); ++j) {
totalPenetration = addPenetrations(totalPenetration, collisions[j]._penetration);
// TODO: Andrew to poke avatar using collision info
avatar->poke(collisions[i]);
}
// Check for collisions with the other avatar's leap palms
}
}
}

View file

@ -474,10 +474,10 @@ bool Model::findSphereCollision(const glm::vec3& penetratorCenter, float penetra
outerContinue: ;
}
if (jointIndex != -1) {
// TODO? Andrew to store contactPoint
// don't store collisionInfo._model at this stage, let the outer context do that
collisionInfo._penetration = totalPenetration;
collisionInfo._jointIndex = jointIndex;
collisionInfo._contactPoint = penetratorCenter + penetratorRadius * glm::normalize(totalPenetration);
return true;
}
return false;

View file

@ -21,17 +21,18 @@ public:
CollisionInfo()
: _damping(0.f),
_elasticity(1.f),
_contactPoint(0.f),
_penetration(0.f),
_addedVelocity(0.f) {
}
~CollisionInfo() {}
//glm::vec3 _point;
//glm::vec3 _normal;
float _damping;
float _elasticity;
glm::vec3 _penetration; // depth that bodyA is penetrates bodyB
glm::vec3 _contactPoint; // world-frame point on bodyA that is deepest into bodyB
glm::vec3 _penetration; // depth that bodyA penetrates into bodyB
glm::vec3 _addedVelocity;
};