Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - mesh

#1
Support / Re: Behavior of Ellipsoid collision detection
February 26, 2013, 11:05:49 PM
Yeah, it was more just something I found while playing around with the different algorithms. Thanks for the explanation.
#2
Bugs / Reflected vector is inverted
February 26, 2013, 09:51:57 PM
I think SimpleVector.reflect returns a vector which is -1* the correct reflection. Example:

SimpleVector v = new SimpleVector(1.0f, 2.0f, 3.0f);
SimpleVector normal = new SimpleVector(0, -1.0f, 0);
SimpleVector vr = v.reflect(normal);
   
Log.i("reflect", "v="+v+" normal="+normal+" vr="+vr);


Result is: v=(1.0,2.0,3.0) normal=(0.0,-1.0,0.0) vr=(-1.0,2.0,-3.0)

I expect the reflection to be (1, -2, 3). Same result regardless of whether the normal vector points toward or away from the input vector.
#3
Support / Behavior of Ellipsoid collision detection
February 26, 2013, 09:41:19 PM
I'm getting started with JPCT and I noticed a strange result with the ellipsoid collision detection. Here is my test:

Object3D source = Primitives.getSphere(1f);
source.setCollisionMode(Object3D.COLLISION_CHECK_SELF);
source.translate(0, -2.5f, 0);
graphicsWorld.addObject(source);

Object3D target = Primitives.getSphere(1f);
target.setCollisionMode(Object3D.COLLISION_CHECK_OTHERS);
target.addCollisionListener(new CollisionHandlerTest());
graphicsWorld.addObject(target);

SimpleVector unitDir = new SimpleVector(0, 1, 0);

Log.i("Collision", "Object collisions");
source.checkForCollision(unitDir, 2);
SimpleVector adj = source.checkForCollisionEllipsoid(unitDir, new SimpleVector(1, 1, 1), 5);
Log.i("Collision", "Ellipsoid adjusted: "+adj);
adj = source.checkForCollisionSpherical(unitDir, 1);
Log.i("Collision", "Spherical adjusted: "+adj);




I move the source sphere up by 2.5 units so that it's 0.5 away from the top of the target sphere. Then I try what I believe to be equivalent collision tests, using a radius of 1 for both spherical and ellipsoid methods. The result is:


02-26 21:27:57.305: I/Collision(31851): Object collisions
02-26 21:27:57.315: I/Collision(31851): FirstContact:(0.0,-1.0,0.0) Algo:Ray
02-26 21:27:57.365: I/Collision(31851): FirstContact:(0.0,-2.1,0.0) Algo:Ellipsoid
02-26 21:27:57.365: I/Collision(31851): Ellipsoid adjusted: (0.0,0.4000001,0.0)
02-26 21:27:57.385: I/Collision(31851): FirstContact:(0.037469428,-1.999996,0.005934572) Algo:Sphere
02-26 21:27:57.385: I/Collision(31851): Spherical adjusted: (0.037469428,0.50000405,0.005934572)


Ray and Sphere seem right, but ellipsoid appears to detect 0.1 units before it should. Changing the recursion depth 1-5 doesn't have an effect. Thoughts?