final Vector2 pos = Vector2.fetchTempInstance().set(screenPosition);
if (flipVertical) {
pos.setY(getHeight() - screenPosition.getY());
}
Ray3 result = store;
if (result == null) {
result = new Ray3();
}
final Vector3 origin = Vector3.fetchTempInstance();
final Vector3 direction = Vector3.fetchTempInstance();
getWorldCoordinates(pos, 0, origin);
getWorldCoordinates(pos, 0.3, direction).subtractLocal(origin).normalizeLocal();
result.setOrigin(origin);
result.setDirection(direction);
Vector2.releaseTempInstance(pos);
Vector3.releaseTempInstance(origin);
Vector3.releaseTempInstance(direction);
return result;
}