SCNCamera原理分析之視角
Show me the Code!
首先創(chuàng)建一個(gè)場(chǎng)景
import UIKit
import SceneKit
class ViewController4: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 場(chǎng)景視圖
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: 如何給六面體設(shè)置不同的image还最?
// 添加照相機(jī)
let camera = SCNCamera()
let cameraNode = SCNNode()
cameraNode.camera = camera
cameraNode.position = SCNVector3Make(0, 0, 50)
scnView.scene?.rootNode.addChildNode(cameraNode)
}
}
幾個(gè)重要的屬性設(shè)置效果
調(diào)節(jié)視角
camera.xFov = 20
camera.yFov = 40
以上兩個(gè)屬性在iOS 11已經(jīng)廢棄了墓阀,改用以下兩個(gè)屬性
camera.fieldOfView = .pi*6 // 視角,默認(rèn)60°【值越小拓轻,看到的物體細(xì)節(jié)越在前面斯撮,即被放大】
camera.focalLength = 5 // 焦距,默認(rèn)50mm【值越小扶叉,看到的物體越遠(yuǎn)】
設(shè)置視野遠(yuǎn)近范圍
camera.zNear = 45 // 相機(jī)能照到的最近距離勿锅,默認(rèn)1m
camera.zFar = 60 //相機(jī)能照到的最遠(yuǎn)的距離帕膜,默認(rèn)100m
這個(gè)有趣,讀者可以自己手動(dòng)旋轉(zhuǎn)場(chǎng)景看看效果
設(shè)置焦距
camera.focusDistance = 45 // 焦距 默認(rèn)2.5
camera.focalBlurSampleCount = 1 // 設(shè)置聚焦時(shí)粱甫,模糊物體模糊度 默認(rèn)0
設(shè)置正投影
// 設(shè)置正投影【即:物體不論靠近或者遠(yuǎn)離,大小看起來(lái)都一樣】
camera.usesOrthographicProjection = true
// 正投影比例 默認(rèn)1【當(dāng)且僅當(dāng)usesOrthographicProjection == true 時(shí)有效】
camera.orthographicScale = 20