Insert3D is the easiest 🥳 and fastest 🚀 way to embed a 3D model in your iOS app. It combines SceneKit and Model I/O into a simple library for creative iOS developers who want to provide a unique experience for their users. This library uniquely supports both:
- Static implementations to easily replace images with engaging 3D content without learning SceneKit.
- Dynamic implementations where models need to be programmatically loaded via URLs using the raw 3D filetype on run-time.
Use CocoaPods. Add the dependency to your
Podfile and then run
- Import library
swift import Insert3D
Download and add example OBJ model (example-model.zip)
Copy & Paste into viewDidLoad
var viewer = Insert3DViewer() viewer.width = 380 viewer.height = 380 var model = Insert3DModel() model.mesh = "model/Nachos.obj" model.material = "model/NachosMaterial.jpg" view.Insert3D(viewerSetup: viewer, modelSetup: model)
Create instances of
Insert3DModel() and specify parameters, then pass the instances into the main
view.Insert3D() function to complete setup and display the viewer.
Command + R to Run
Insert3DViewer() set the dimensions and position of the
SCNView subview where the model is a central node.
// Values can be progromatically set and adjusted at any time var viewer = Insert3DViewer() viewer.width = 380 // Width viewer.height = 380 // Height viewer.x = 20 // X position of the top left corner viewer.y = 200 // Y position of the top left corner viewer.background = UIColor.white // Specify background of viewer. White by default // Show the model! view.Insert3D(viewerSetup: viewer, modelSetup: model) // modelSetup is also required
Dimensions using the relative position on screen can be expressed by converting them into
Int. For example, to center align the viewer, set the value for x equal to
Int(UIScreen.main.bounds.size.width*0.5) - viewer.width/2.
Included are default values width = 200, height = 200, x = 0, and y = 0.
Any, providing much flexibility for usage:
- A color (NSColor/UIColor or CGColor), specifying a uniform color for the material’s surface
- A number (NSNumber), specifying a uniform scalar value for the material's surface (useful for physically based properties such as metalness)
- An image (NSImage/UIImage or CGImage), specifying a texture to be mapped across the material’s surface
- An NSString or NSURL object specifying the location of an image file
- A video player (AVPlayer) or live video capture preview (AVCaptureDevice, in iOS only)
- A Core Animation layer (CALayer)
- A texture (SKTexture, MDLTexture, MTLTexture, or GLKTextureInfo)
- A SpriteKit scene (SKScene)
- A specially formatted image or array of six images, specifying the faces of a cube map
Insert3D() know which model you'd like to use, along with how you'd like it configured within the viewer.
// Values can be progromatically set and adjusted at any time. var model = Insert3DModel() model.mesh = "my3DFilePath" // Currently supports OBJ. model.texture = "myTexturePath" // Supports image files already mapped to the model model.autoRotate = true // Set true by default. Rotates on the horizontal axis model.rotationSpeed = 9 // Model makes one full rotation every 9 seconds model.fixed = false // Set false by deafault. Should the model be movable/rotatable by a user? // Show the model! view.Insert3D(viewerSetup: viewer, modelSetup: model) // viewerSetup is also required
NOTE: There are infinite possible customization one could apply to a model, and included here are the basic ones. Consider expanding this repository's functionality via a contribution.
Load via URL
The model and texture paths are a
String. This means you can load a model + texture dynamically using
- Fork it ( https://github.com/Viktoo/Insert3D/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
This project is released under the BSD 2-Clause "Simplified" License
*Note that all licence references and agreements mentioned in the Insert3D README section above are relevant to that project's source code only.