public bool ComputeIntersection(Vector3 source, Vector3 direction, ref IntersectionResults results)
{
var vr = SteamVR.instance;
var input = new VROverlayIntersectionParams_t();
input.eOrigin = SteamVR_Render.instance.trackingSpace;
input.vSource.v = new float[] { source.x, source.y, -source.z };
input.vDirection.v = new float[] { direction.x, direction.y, -direction.z };
var output = new VROverlayIntersectionResults_t();
if (!vr.overlay.ComputeOverlayIntersection(handle, ref input, ref output))
return false;
results.point = new Vector3(output.vPoint.v[0], output.vPoint.v[1], -output.vPoint.v[2]);
results.normal = new Vector3(output.vNormal.v[0], output.vNormal.v[1], -output.vNormal.v[2]);
results.UVs = new Vector2(output.vUVs.v[0], output.vUVs.v[1]);
results.distance = output.fDistance;
return true;
}