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 pod install:
pod 'Insert3D'- Import library
 
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 Insert3DViewer() and 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
Instances of 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 requiredDimensions
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.
Background
Background support's 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
 
Instances of Insert3DModel() let 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 requiredNOTE: 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 URL(string: "https://myURL/file")
- 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

