Created
October 31, 2020 13:16
-
-
Save MasDennis/49e79596c9ab197715be617f3f5096ad to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let viewBoundingBox = viewSpaceBoundingBox(fromNormalizedImageBoundingBox: boundingBox, | |
usingDisplayTransform: displayTransform) | |
let midPoint = CGPoint(x: viewBoundingBox.midX, | |
y: viewBoundingBox.midY) | |
// Get the feature point that is closed to our detected rectangle's center | |
let results = sceneView.hitTest(midPoint, types: .featurePoint) | |
let depthBufferZ = calculateFragmentDepth(usingCamera: camera, | |
distanceToTarget: Double(result.distance), | |
usesReverseZ: sceneView.usesReverseZ) | |
private func calculateFragmentDepth(usingCamera camera: SCNCamera, | |
distanceToTarget: Double, | |
usesReverseZ: Bool) -> Float | |
{ | |
// SceneKit uses a reverse z buffer since iOS 13. In case it uses a reverse buffer. | |
// We'll need to swap the near and far planes. | |
let zFar = usesReverseZ ? camera.zNear : camera.zFar | |
let zNear = usesReverseZ ? camera.zFar : camera.zNear | |
let range = 2.0 * zNear * zFar | |
// The depth value in in normalized device coordinates [-1, 1]. | |
let fragmentDepth = (zFar + zNear - range / distanceToTarget) / (zFar - zNear) | |
// Convert to normalized coordinates [0, 1]. | |
return Float((fragmentDepth + 1.0) / 2.0) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment