向 ARKit 添加自定义视图
Posted
技术标签:
【中文标题】向 ARKit 添加自定义视图【英文标题】:Adding custom view to ARKit 【发布时间】:2017-06-23 14:58:29 【问题描述】:我刚开始看苹果的 ARKitExample,我还在学习。我需要像交互式指南一样。例如,我们可以在那个区域检测到一些东西(比如 QRCode),我可以用 1 个标签显示吗?
是否可以将自定义视图(如 UIVIew、UIlabel)添加到表面?
编辑
我看到了一些添加行的示例。我需要找到如何添加额外的视图或图像。
let mat = SCNMatrix4FromMat4(currentFrame.camera.transform)
let dir = SCNVector3(-1 * mat.m31, -1 * mat.m32, -1 * mat.m33)
let currentPosition = pointOfView.position + (dir * 0.1)
if button!.isHighlighted
if let previousPoint = previousPoint
let line = lineFrom(vector: previousPoint, toVector: currentPosition)
let lineNode = SCNNode(geometry: line)
lineNode.geometry?.firstMaterial?.diffuse.contents = lineColor
sceneView.scene.rootNode.addChildNode(lineNode)
我认为这段代码应该能够添加自定义图像。但我需要找到整个样本。
func updateRenderer(_ frame: ARFrame)
drawCameraImage(withPixelBuffer:frame.capturedImage)
let viewMatrix = simd_inverse(frame.came.transform)
let prijectionMatrix = frame.camera.prijectionMatrix
updateCamera(viewMatrix, projectionMatrix)
updateLighting(frame.lightEstimate?.ambientIntensity)
drawGeometry(forAnchors: frame.anchors)
【问题讨论】:
【参考方案1】:ARKit 不是渲染引擎——它不会为您显示任何内容。 ARKit 提供有关真实世界空间的信息,供渲染引擎使用,例如 SceneKit、Unity 以及您构建的任何自定义引擎(使用 Metal 等),以便它们可以显示似乎居住在真实世界空间中的内容。因此,对于 ARKit 的任何“我如何显示”问题实际上都是针对您与 ARKit 一起使用的任何渲染引擎的问题。
SceneKit 是使用 ARKit 显示 3D 内容的简单开箱即用、无需额外软件的方式,所以我想您是在问这个问题。
SceneKit 无法将 UIView
渲染为 3D 场景的一部分。但它可以将平面、立方体或其他形状以及纹理贴图 2D 内容渲染到它们上面。如果您想在 ARKit 检测到的平面上绘制文本标签,这就是研究的方向——按照示例的,嗯,示例创建与检测到的ARPlaneAnchor
s 对应的SCNPlane
对象,为自己获取一些文本的图像,并将该图像设置为平面几何的漫反射内容。
【讨论】:
啊谢谢。我将更多地研究 SceneKit、SCNPlane 和 SCNView。希望我可以生成动态内容。 查看最近几年来自 WWDC 的 SceneKit 演讲——几乎所有适用于 ARSCNVIew 的内容。包括有趣的动态纹理映射技巧,例如 2014 年演讲中展示的 SpriteKit 作为材质的东西。【参考方案2】:是的,您可以在 ARKit 场景中添加自定义视图。 只需制作您的视图图像并将其添加到您想要的任何位置。 您可以使用以下代码获取 UIView 的图像
func image(with view: UIView) -> UIImage?
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)
defer UIGraphicsEndImageContext()
if let context = UIGraphicsGetCurrentContext()
view.layer.render(in: context)
let image = UIGraphicsGetImageFromCurrentImageContext()
return image
return nil
【讨论】:
以上是关于向 ARKit 添加自定义视图的主要内容,如果未能解决你的问题,请参考以下文章
向 XML 添加自定义视图...但使用 GENERIC 类型
python Django:向管理员更改列表视图添加自定义按钮