ARKit系列文章目录swift
本文是Ray Wenderlich上《ARKit by Tutorials》的读书笔记,主要讲内容概要和读后感 session
该书推出了三个免费章节,主讲如何制做一个时空门app:第7,8,9章,我对其进行了完整翻译,而本文是对如下三章内容的总结和感想:app
主要讲了初始的准备工做,ARSession的启动,平面检测,debug选项 ide
主要讲了命中测试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就火了起来,但不少人只公开了视频效果,并无公开代码.相信大多数人和我同样,虽然总体上感受不难,但始终不明白这种外面看不到墙壁的效果是如何实现的,这本书终于帮咱们解开了疑惑.
第二部分读书笔记结束!