SCNCamera原理分析之视角
Show me the Code!
首先创建一个场景
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)
}
}
几个重要的属性设置效果
调节视角
camera.xFov = 20
camera.yFov = 40
以上两个属性在iOS 11已经废弃了,改用以下两个属性
camera.fieldOfView = .pi*6 // 视角,默认60°【值越小,看到的物体细节越在前面,即被放大】
camera.focalLength = 5 // 焦距,默认50mm【值越小,看到的物体越远】
设置视野远近范围
camera.zNear = 45 // 相机能照到的最近距离,默认1m
camera.zFar = 60 //相机能照到的最远的距离,默认100m
这个有趣,读者可以自己手动旋转场景看看效果
设置焦距
camera.focusDistance = 45 // 焦距 默认2.5
camera.focalBlurSampleCount = 1 // 设置聚焦时,模糊物体模糊度 默认0
设置正投影
// 设置正投影【即:物体不论靠近或者远离,大小看起来都一样】
camera.usesOrthographicProjection = true
// 正投影比例 默认1【当且仅当usesOrthographicProjection == true 时有效】
camera.orthographicScale = 20