RayTest simple issue

Post Reply
GripInc
Posts: 2
Joined: Tue Apr 15, 2014 5:16 pm

RayTest simple issue

Post by GripInc »

Hi all,

I have an issue with rayTest: it doesn't add any collision where it should obviously.
I'm pretty sure I am missing something easy.

Here is the minimal code:

Code: Select all

mBroadphase = new btDbvtBroadphase();
mCollisionConfiguration = new btDefaultCollisionConfiguration();
mDispatcher = new btCollisionDispatcher(mCollisionConfiguration);
mCollisionWorld = new btCollisionWorld(mDispatcher, mBroadphase, mCollisionConfiguration);

btCollisionObject* collisionObject = new btCollisionObject();
btBoxShape* collisionShape = new btBoxShape(btVector3(10.f, 10.f, 10.f));
collisionObject->setCollisionShape(collisionShape);
mCollisionWorld->addCollisionObject(collisionObject);

btVector3 testFrom = btVector3(10.f,0.f,0.f);
btVector3 testTo = btVector3(150.f,0.f,0.f);

collisionObject->setWorldTransform(btTransform(btQuaternion(0.f, 0.f, 0.f, 0.f), btVector3(100.f,0.f,0.f)));

btCollisionWorld::ClosestRayResultCallback closestRayResultCallback(testFrom, testTo);
mCollisionWorld->rayTest(testFrom, testTo, closestRayResultCallback);

if(closestRayResultCallback.hasHit())
{
	int i = 0; //Used to breakpoint on
}
Adding to my confusion, a collision is registered if I replace btVector3 testFrom = btVector3(10.f,0.f,0.f); by btVector3 testFrom = btVector3(9.f,0.f,0.f);

Thanks for your help :)
Flix
Posts: 456
Joined: Tue Dec 25, 2007 1:06 pm

Re: RayTest simple issue

Post by Flix »

GripInc wrote:collisionObject->setWorldTransform(btTransform(btQuaternion(0.f, 0.f, 0.f, 0.f), btVector3(100.f,0.f,0.f)));
What world transform is this ? Maybe you should use btMatrix3x3::getIdentity() as the transform basis.
GripInc
Posts: 2
Joined: Tue Apr 15, 2014 5:16 pm

Re: RayTest simple issue

Post by GripInc »

Hi again,

I finally got the solution:
I had to update AABB after a collision object has its transform changed.

Code: Select all

collisionObject->setWorldTransform(btTransform(btQuaternion(0.f, 0.f, 0.f, 0.f), btVector3(100.f,0.f,0.f)));
mCollisionWorld->updateSingleAabb(collisionObject);
@Flix: I don't get the point of setting an identity matrix as the object transform. I am doing something wrong in my code?

Thanks for your help :)
Flix
Posts: 456
Joined: Tue Dec 25, 2007 1:06 pm

Re: RayTest simple issue

Post by Flix »

GripInc wrote:I don't get the point of setting an identity matrix as the object transform. I am doing something wrong in my code?
btQuaternion(0.f, 0.f, 0.f, 0.f) doesn't seem to be a normalized unit quaternion. I would have used something like:

Code: Select all

collisionObject->setWorldTransform(btTransform(btMatrix3x3::getIdentity(),btVector3(100.f,0.f,0.f)));
, but this did not solve your problem :oops: .
bwelch
Posts: 48
Joined: Thu Dec 12, 2013 4:04 pm

Re: RayTest simple issue

Post by bwelch »

I believe a "clear" quaternion would be btQuaternion(0,0,0,1), not btQuaternion(0,0,0,0).
Post Reply