TrianglePick.getIntersectionPoint() is not always returning the nearest intersection. Actually getIntersectionPoint is a bit unspecifiy as there might be more than one points in one mesh that are hit. Nevertheless to make the thing more predictable I changed the method to always return the nearest intersectionpoint.
as before, to get a result you need enable checkDistance for TrianglePickResult
Here is the patch:
[patch]Index: src/com/jme/intersection/TrianglePickData.java
===================================================================
--- src/com/jme/intersection/TrianglePickData.java (revision 5616)
+++ src/com/jme/intersection/TrianglePickData.java (working copy)
@@ -52,7 +52,8 @@
private final Vector3f[] vertices = new Vector3f[]{new Vector3f(), new Vector3f(), new Vector3f()};
private final Vector3f intersectionPoint = new Vector3f();
-
+ private final Vector3f nearestIntersectionPoint = new Vector3f();
+
public TrianglePickData(Ray ray, TriMesh targetMesh,
ArrayList targetTris, boolean checkDistance) {
super(ray, targetMesh, targetTris, false);
@@ -81,6 +82,7 @@
distances = triDistanceSq;
if (triDistanceSq > 0 && triDistanceSq < distanceSq) {
distanceSq = triDistanceSq;
+ nearestIntersectionPoint.set(intersectionPoint);
}
}
@@ -128,8 +130,15 @@
return Float.POSITIVE_INFINITY;
}
+ /**
+ *
+ * returns the nearest intersection point! This method only works with setCheckDistance(...)
+ * enabled in TrianglePickResults
+ *
+ * @return Vector3f nearest intersection-point
+ */
public Vector3f getIntersectionPoint() {
- return intersectionPoint;
+ return nearestIntersectionPoint;
}
[/patch]