- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
什么是 RealityKit 和 ARKit 中的光线转换?
我什么时候需要使用 makeRaycastQuery实例方法?
func makeRaycastQuery(from point: CGPoint,
allowing target: ARRaycastQuery.Target,
alignment: ARRaycastQuery.TargetAlignment) -> ARRaycastQuery?
感谢任何帮助。
最佳答案
简单的 Ray-Casting
,与 Hit-Testing
的方式相同,通过从屏幕转换假想的光线来帮助定位真实世界表面上的 3D 点二维点到检测到的平面上。在 Apple 文档 (2019) 中,光线转换的定义如下:
Ray-casting is the preferred method for finding positions on surfaces in the real-world environment, but the hit-testing functions remain present for compatibility. With
tracked raycasting
, ARKit and RealityKit continue to refine the results to increase the position's accuracy of virtual content you placed with a raycast.
当用户想要将虚拟内容放置到检测到的表面上时,最好为此提供提示。许多 AR 应用程序绘制一个焦点圆或正方形,让用户视觉确认 RealityKit 或 ARKit 知道的表面的形状和对齐方式。因此,要找出在现实世界中放置焦点圆圈或正方形的位置,您可以使用 ARRaycastQuery
询问框架在现实世界中存在任何表面的位置。
这是一个示例,您可以在其中了解如何实现 raycast(query)
实例方法:
import UIKit
import RealityKit
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
let model = try! Entity.loadModel(named: "usdzModel")
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.raycasting()
}
fileprivate func raycasting() {
guard let query = arView.makeRaycastQuery(from: arView.center,
allowing: .estimatedPlane,
alignment: .horizontal)
else { return }
guard let result = arView.session.raycast(query).first
else { return }
let raycastAnchor = AnchorEntity(world: result.worldTransform)
raycastAnchor.addChild(model)
arView.scene.anchors.append(raycastAnchor)
}
}
如果您想知道如何在 RealityKit 中使用 Convex-Ray-Casting
,请阅读 this post .
如果您想知道如何在 RealityKit 中使用 Hit-Testing
,请阅读 this post .
这是一个示例代码,您可以在其中了解如何在 SwiftUI 中实现光线转换逻辑:
import SwiftUI
import RealityKit
struct ContentView: View {
@State private var arView = ARView(frame: .zero)
var model = try! Entity.loadModel(named: "robot")
var body: some View {
ARViewContainer(arView: $arView)
.onTapGesture(count: 1) { self.raycasting() }
.ignoresSafeArea()
}
fileprivate func raycasting() {
guard let query = arView.makeRaycastQuery(from: arView.center,
allowing: .estimatedPlane,
alignment: .horizontal)
else { return }
guard let result = arView.session.raycast(query).first
else { return }
let raycastAnchor = AnchorEntity(world: result.worldTransform)
raycastAnchor.addChild(model)
arView.scene.anchors.append(raycastAnchor)
}
}
然后……
struct ARViewContainer: UIViewRepresentable {
@Binding var arView: ARView
func makeUIView(context: Context) -> ARView { return arView }
func updateUIView(_ uiView: ARView, context: Context) { }
}
附言
如果您要从头构建这两个应用变体中的任何一个(即不使用 Xcode AR 模板),请不要忘记启用 中的
标签。Privacy - Camera Usage Description
键信息
关于swift - 在 ARKit 和 RealityKit 中使用 Raycast 的真正好处是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56466773/
我想在检测到的平面上绘制网格点,如 ARCore video link 中所示我不知道如何实现它。 你能帮我实现这个目标吗?提前致谢。 最佳答案 ARKit中的经典网格可视化|RealityKit 在
我不知道如何让下面的移动函数重复,以便在简单的 meshResource 上创建一个恒定的旋转。有什么建议吗? var transform = sphereEntity.transform trans
我正在尝试在我的 RealityKit AR 场景中添加光照。我在 Reality Composer 中找不到光照选项。如果有办法添加 Directional Light 或对其进行编辑,请告诉我。我
RealityKit 有很多有用的功能,比如通过网络内置的多用户同步来支持共享世界,但我似乎找不到太多关于在运行时创建网格/对象的文档。 RealityKit 有一些基本的网格生成功能(长方体、球体等
在加载 Experience 后,我在 Reality Composer 中为人脸 anchor 添加了内容。我在 Reality Composer 上创建的,我创建了一个像这样的面部跟踪 sessi
在与 ARKit 类似的 RealityKit 中,物体在相机检测到某种平面之前不会显示。一旦相机检测到该表面,对象将显示并固定在该表面上。 我如何(通过代码)知道相机是否检测到平面?实际上,我想突出
我从 Xcode 的默认 AR 项目开始做这个增强现实项目。 我需要知道 ARKit 使用的相机的焦距。 This page很好地定义了焦距: Focal length, usually repres
通过在 model 上设置 Material 的颜色ModelEntity 的属性,我可以改变对象的不透明度/alpha。但是你如何制作这个动画呢?我的目标是为具有完全不透明度的对象设置动画,然后让它
此代码有效: let entity = try! Entity.load(named: "toy_robot_vintage") anchorEntity.addChild(entity) 但这不是:
我正在使用 ARKit 3 和 RealityKit 开发 iOS 应用程序。我想在包含图像的房间内创建虚拟 2d 平面。因此我使用了 Adding a material to a ModelEnti
此代码有效: let entity = try! Entity.load(named: "toy_robot_vintage") anchorEntity.addChild(entity) 但这不是:
我有一个自定义的 usdz 文件(不是通过代码创建的,而是一把真正的椅子!)。我将其保存在 Entity 中。 一旦我有了它,这就是我的代码: func updateUIView(_ uiView:
我想显示图库中的图片。我正在使用 imagePicker 加载图像。 func imagePickerController(_ picker: UIImagePickerController, did
我在 Reality Composer 中构建了一个场景,并在其中添加了 3 个对象。问题是阴影太强烈(暗)。 我尝试在 this 的 RealityKit 中使用定向光回答而不是来自 Reality
我想从我的场景中删除一个实体。 我在 UpdateUIView 函数中创建了我的实体,如下所示: // create anchor and model-Entity let anchor = Anch
在我的 previous question我已经找到了如何仅在对象上的一个轴上进行旋转变换,现在我希望将其设置为动画。 有没有办法在 RealityKit 中做到这一点? 最佳答案 带动画的旋转: c
我无法发布我的 RealityKit ARView()从内存里。 我知道 ARKit + SceneKit 有(是?)类似的问题——有这样的解决方法:https://stackoverflow.com
我正在尝试使用 Reality Kit 玩增强现实。 我想让我的程序执行以下操作之一, 可由用户 选择: 仅检测水平表面。 仅检测垂直表面。 检测水平和垂直表面。 检测图像,就像我打印目标一样,附加到
我正在尝试围绕其 z 轴旋转一个立方体,但我找不到方法。 RealityKit 有没有办法做到这一点? 最佳答案 在 RealityKit 中,至少有三种方法可以绕单轴旋转对象 . 在每个示例中,我们
对于 SCNNodes,我们有 SCNBillboardConstraint ,那么有什么方法可以将此约束应用于实体(使用 RealityKit 而不是 SceneKit 时),以便实体在设备移动时始
我是一名优秀的程序员,十分优秀!