SCNCamera原理分析之視角
Show me the Code!
首先創(chuàng)建一個場景
import UIKit
import SceneKit
class ViewController4: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 場景視圖
let scnView = SCNView.init(frame: view.bounds)
scnView.backgroundColor = UIColor.black
scnView.allowsCameraControl = true
scnView.scene = SCNScene()
view.addSubview(scnView)
// 盒子1
let box1 = SCNBox.init(width: 10, height: 10, length: 10, chamferRadius: 0)
box1.firstMaterial?.diffuse.contents = UIImage.init(named: "bw")
let boxNode1 = SCNNode()
boxNode1.geometry = box1
scnView.scene?.rootNode.addChildNode(boxNode1)
// 盒子2
let box2 = SCNBox.init(width: 10, height: 10, length: 10, chamferRadius: 0)
box2.firstMaterial?.diffuse.contents = UIImage.init(named: "bw")
let boxNode2 = SCNNode()
boxNode2.geometry = box2
boxNode2.position = SCNVector3Make(0, 10, -20)
scnView.scene?.rootNode.addChildNode(boxNode2)
// todoyy: 如何給六面體設置不同的image?
// 添加照相機
let camera = SCNCamera()
let cameraNode = SCNNode()
cameraNode.camera = camera
cameraNode.position = SCNVector3Make(0, 0, 50)
scnView.scene?.rootNode.addChildNode(cameraNode)
}
}

運行效果
幾個重要的屬性設置效果
調(diào)節(jié)視角
camera.xFov = 20
camera.yFov = 40
以上兩個屬性在iOS 11已經(jīng)廢棄了,改用以下兩個屬性
camera.fieldOfView = .pi*6 // 視角,默認60°【值越小,看到的物體細節(jié)越在前面,即被放大】
camera.focalLength = 5 // 焦距,默認50mm【值越小,看到的物體越遠】

調(diào)節(jié)視角
設置視野遠近范圍
camera.zNear = 45 // 相機能照到的最近距離,默認1m
camera.zFar = 60 //相機能照到的最遠的距離,默認100m
這個有趣,讀者可以自己手動旋轉(zhuǎn)場景看看效果

視野遠近范圍
設置焦距
camera.focusDistance = 45 // 焦距 默認2.5
camera.focalBlurSampleCount = 1 // 設置聚焦時,模糊物體模糊度 默認0

設置焦距,這里效果似乎不明顯
設置正投影
// 設置正投影【即:物體不論靠近或者遠離,大小看起來都一樣】
camera.usesOrthographicProjection = true
// 正投影比例 默認1【當且僅當usesOrthographicProjection == true 時有效】
camera.orthographicScale = 20

大小真的都一樣耶?。。。。。。。?!