Java Code Examples for com.jme3.scene.Node#collideWith()
The following examples show how to use
com.jme3.scene.Node#collideWith() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: TestJoystick.java From jmonkeyengine with BSD 3-Clause "New" or "Revised" License | 5 votes |
private static CollisionResults pick(Camera cam, Vector2f mouseLoc, Node node) { CollisionResults results = new CollisionResults(); Ray ray = new Ray(); Vector3f pos = new Vector3f(mouseLoc.x, mouseLoc.y, -1); Vector3f dir = new Vector3f(mouseLoc.x, mouseLoc.y, 1); dir.subtractLocal(pos).normalizeLocal(); ray.setOrigin(pos); ray.setDirection(dir); node.collideWith(ray, results); return results; }
Example 2
Source File: PointUtil.java From OpenRTS with MIT License | 5 votes |
private static CollisionResult getCollision(Node n, Ray r) { CollisionResults results = new CollisionResults(); n.collideWith(r, results); if (results.size() == 0) { return null; } return results.getClosestCollision(); }
Example 3
Source File: SceneEditTool.java From MikuMikuStudio with BSD 2-Clause "Simplified" License | 5 votes |
private CollisionResult pick(Camera cam, Vector2f mouseLoc, Node node) { CollisionResults results = new CollisionResults(); Ray ray = new Ray(); Vector3f pos = cam.getWorldCoordinates(mouseLoc, 0).clone(); Vector3f dir = cam.getWorldCoordinates(mouseLoc, 0.1f).clone(); dir.subtractLocal(pos).normalizeLocal(); ray.setOrigin(pos); ray.setDirection(dir); node.collideWith(ray, results); CollisionResult result = results.getClosestCollision(); return result; }
Example 4
Source File: MoveToolControl.java From jmonkeybuilder with Apache License 2.0 | 4 votes |
@Override @JmeThread public void processTransform() { final EditorTransformSupport editorControl = getEditorControl(); final LocalObjects local = LocalObjects.get(); final Camera camera = editorControl.getCamera(); final InputManager inputManager = EditorUtil.getInputManager(); final Vector2f cursorPosition = inputManager.getCursorPosition(); final CollisionResults results = local.nextCollisionResults(); final Vector3f position = camera.getWorldCoordinates(cursorPosition, 0f, local.nextVector()); final Vector3f direction = camera.getWorldCoordinates(cursorPosition, 1f, local.nextVector()) .subtractLocal(position) .normalizeLocal(); final Ray ray = local.nextRay(); ray.setOrigin(position); ray.setDirection(direction); final Node collisionPlane = getCollisionPlane(); collisionPlane.collideWith(ray, results); final CollisionResult result = results.getClosestCollision(); final Transform transform = editorControl.getTransformCenter(); // Complex trigonometry formula based on sin(angle)*distance if (result == null || transform == null) { return; } final Node parentNode = getParentNode(); final Vector3f translation = parentNode.getLocalTranslation(); final Vector3f contactPoint = result.getContactPoint(); // get a point of collisionPlane //set new deltaVector if it's not set if (Float.isNaN(editorControl.getTransformDeltaX())) { editorControl.setTransformDeltaX(translation.getX() - contactPoint.getX()); editorControl.setTransformDeltaY(translation.getY() - contactPoint.getY()); editorControl.setTransformDeltaZ(translation.getZ() - contactPoint.getZ()); } // add delta of the picked place contactPoint.addLocal(editorControl.getTransformDeltaX(), editorControl.getTransformDeltaY(), editorControl.getTransformDeltaZ()); final Vector3f difference = contactPoint.subtract(translation, local.nextVector()); float distanceToContactPoint = translation.distance(contactPoint); // Picked vector final PickedAxis pickedAxis = editorControl.getPickedAxis(); final TransformationMode transformationMode = editorControl.getTransformationMode(); final Vector3f pickedVector = transformationMode.getPickedVector(transform, pickedAxis, camera); final Quaternion rotation = parentNode.getLocalRotation(); // the main formula for constraint axis final Vector3f normalizedDifference = local.nextVector(difference).normalizeLocal(); float angle = normalizedDifference.angleBetween(rotation.mult(pickedVector, local.nextVector()) .normalizeLocal()); float distanceVec2 = distanceToContactPoint * FastMath.sin(angle); // fix if angle>90 degrees Vector3f perpendicularVec = collisionPlane.getLocalRotation() .mult(Vector3f.UNIT_X, local.nextVector()) .multLocal(distanceVec2); Vector3f checkVec = contactPoint.add(perpendicularVec, local.nextVector()) .subtractLocal(contactPoint) .normalizeLocal(); float angleCheck = checkVec.angleBetween(normalizedDifference); if (angleCheck < FastMath.HALF_PI) { perpendicularVec.negateLocal(); } // find distance to move float distanceToMove = contactPoint.addLocal(perpendicularVec).distance(translation); // invert value if it's needed for negative movement if (angle > FastMath.HALF_PI) { distanceToMove = -distanceToMove; } translateObjects(pickedAxis, notNull(editorControl.getToTransform()), transform, distanceToMove); }