Latest 1.3.1
Homepage https://github.com/maxxfrazer/SceneKit-PortalMask
License MIT
Platforms ios 11.0

SceneKit-PortalMask

See my Medium post about this CocoaPod

This class PortalMask creates an occluding box around any rectangular frame, including a tracking image, which turns the tracking image or any static area into an Augmented Reality portal into a scene you can define inside that area that can be seen by looking through the defined portal.
This can also be used to have the illusion of a hole in the ground.

Include this pod in your project:
pod 'PortalMask'

The following example code creates a portal ontop of a tracking marker, similar to the example gif.

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
    if let imageAnchor = anchor as? ARImageAnchor {
        let nodeRotated = SCNNode()
        nodeRotated.eulerAngles.x = -.pi / 2
        // the next 2 lines add the portal
        let portal = PortalMask(frameSize: imageAnchor.referenceImage.physicalSize)
        nodeRotated.addChildNode(portal)

        // the next 4 lines add a cube inside the image area
        let width = imageAnchor.referenceImage.physicalSize.width
        let boxNode = SCNNode(geometry: SCNBox(width: width, height: width, length: width, chamferRadius: 0))
        boxNode.position.z = -boxNode.width
        nodeRotated.addChildNode(boxNode)

        node.addChild(nodeRotated)
    }
}

Also contains functions for circular holes:

let portal = PortalMask(radius: imageAnchor.referenceImage.physicalSize.width)

And any other polygon by feeding coordinates. This example will make a triangular portal:

let portal = PortalMask(path: [CGPoint(x: 1, y: -1), CGPoint(x: 0, y: 1), CGPoint(x: -1, y: -1)])

Here’s some basic examples of what you can do with this Pod:

Tracking Portal Example
Flappy Bird Example

Latest podspec

{
    "name": "PortalMask",
    "version": "1.3.1",
    "summary": "PortalMask window to an AR world",
    "description": "PortalMask create a window into any collection of SceneKit elements by occluding other things around it.n     This can be used ontop of ARReferenceImage, create a static portal into another world,n     or to have the illusion of a hole in the ground.",
    "homepage": "https://github.com/maxxfrazer/SceneKit-PortalMask",
    "license": "MIT",
    "authors": "Max Cobb",
    "source": {
        "git": "https://github.com/maxxfrazer/SceneKit-PortalMask.git",
        "tag": "1.3.1"
    },
    "swift_version": "4.1",
    "platforms": {
        "ios": "11.0"
    },
    "source_files": "PortalMask/*.swift"
}

Pin It on Pinterest

Share This