ARKit系列文章目錄swift
本文是Ray Wenderlich上《ARKit by Tutorials》的讀書筆記,主要講內容概要和讀後感 session
該書推出了三個免費章節,主講如何製做一個時空門app:第7,8,9章,我對其進行了完整翻譯,而本文是對如下三章內容的總結和感想:app
主要講了初始的準備工做,ARSession的啓動,平面檢測,debug選項 ide
session被打斷後的處理,平面更新處理等主要講了命中測試Hit testing來給屏幕中央處添加錨點post
var viewCenter: CGPoint {
let viewBounds = view.bounds
return CGPoint(x: viewBounds.width / 2.0, y: viewBounds.height / 2.0)
}
// 1
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// 2
if let hit = sceneView?.hitTest(viewCenter, types: [.existingPlaneUsingExtent]).first {
// 3
sceneView?.session.add(anchor: ARAnchor.init(transform: hit.worldTransform))
}
}
複製代碼
利用命中測試,能夠知道屏幕中心是否對準了一個平面 測試
這樣當對準平面時就能夠點擊屏幕添加3D物體了spa
主要講了大量材質紋理的實際使用,包括wrapping mode等wrapT,wrapS翻譯
還有燈光的使用debug
本章節中最有趣的部分就是:如何讓時空門從外面沒法看到(從外面只能看到門框),而進入門內,全部東西都能看到.就是這種效果: 3d
作法很是神奇:在牆壁的外側再包一層幾乎透明的幾何體(SCNBox的transparency = 0.000001),並控制外層的渲染順序(renderingOrder),讓它比內部的物體更早渲染出來
func makeOuterSurfaceNode(width: CGFloat, height: CGFloat, length: CGFloat) -> SCNNode {
// 1
let outerSurface = SCNBox(width: width,
height: height,
length: length,
chamferRadius: 0)
// 2
outerSurface.firstMaterial?.diffuse.contents = UIColor.white
outerSurface.firstMaterial?.transparency = 0.000001
// 3
let outerSurfaceNode = SCNNode(geometry: outerSurface)
outerSurfaceNode.renderingOrder = 10
return outerSurfaceNode
}
複製代碼
代碼解釋:
因爲時空門app的製做過程已經由官方做爲免費章節發佈,我也所有翻譯了出來.本文只列出了重點內容,若有須要請精讀原文或譯文.
自從ARKit發佈後,網上相似時空門這類Demo就火了起來,但不少人只公開了視頻效果,並無公開代碼.相信大多數人和我同樣,雖然總體上感受不難,但始終不明白這種外面看不到牆壁的效果是如何實現的,這本書終於幫咱們解開了疑惑.
第二部分讀書筆記結束!