例如:我有兴趣在垂直平面上放置 2D 图像(例如:白色或单色墙,不存在特征点)。
有哪些不同的解决方法?
我知道 ARCore 支持相对于其他对象放置对象。如何扩展它以满足我将对象相对于未检测到特征点的其他对象放置的要求?
非常感谢任何想法或解决方法。
我正在使用 ARCore 创建一个应用程序以在空白表面上显示一些图像。我想捕获显示对象的那个表面的图像。我在 AR 相机屏幕上放了一个捕获按钮。
是否可以使用 ARCore 相机中的对象捕捉该视图?
我在 Kotlin 中构建了一个模块,然后导入到我的项目中。我minifyEnabled在模块的build.gradle文件中输入了false 。但是看不到源代码或者无法放置断点。
它适用于 Java,但不适用于 Kotlin。
我想要实现类似于ARCore 的光线投射方法的东西,该方法采用世界空间坐标中的任意光线而不是屏幕空间点:
List<HitResult> hitTest (float[] origin3, int originOffset, float[] direction3, int directionOffset)
Run Code Online (Sandbox Code Playgroud)
我发现 ARKit 本身没有这样的方法,但无论如何也许有人有一个想法!
谢谢。
我正在使用 ARCore 和 Sceneform 开发 Android AR 项目。我需要把对象从30米200米远从用户的摄像头和面临的视锥剔除在ARCORE问题,说明这里。
我正在尝试设置投影矩阵以far使用此方法增加参数
public void getProjectionMatrix (float[] dest,
int offset,
float near,
float far);
Run Code Online (Sandbox Code Playgroud)
但是我找不到设置渲染投影矩阵的可能性。
这是我的代码:
arFragment.arSceneView.apply {
scene.addOnUpdateListener {
// Some code to return from this callback if arFrame is not initialised yet
if (!objectsAdded) {
placeObject(Pose.makeTranslation(0f, 100f, 100f), this)
objectsAdded = true
scene.camera.projectionMatrix = Matrix(computeProjectionMatrix(frame.camera))
// P.S. frame.camera is ArCore's camera, scene.camera is Sceneform's one.
// So, I'm not sure that using …Run Code Online (Sandbox Code Playgroud) 有一段时间我四处寻找我的问题的答案,但找不到任何真正有帮助的东西,或解释正在发生的事情。我也一遍又一遍地检查了我在 SO 上找到的所有内容,但找不到答案。
在 AR 世界中显示对象时,此问题不断发生。iEx 我将一个物体放置在地板上的一个平面上,这是我的隐形阴影平面。那么这完全取决于设备的视角。为了澄清,我添加了图像,它的视角略有不同。看看阴影发生了什么:
我希望一直有一个好的影子,而不是像你看到的那样的人工制品。
注意:我已经使用了shadowSampleCount、 Bias 和所有其他选项,这应该有助于获得适当的、低渲染成本的阴影。
以下是Lighting and Plane、Material等相关代码的摘录
对于SCNLight:
class func directionalLight() -> SCNLight {
let light = SCNLight()
light.type = .directional
light.castsShadow = true
light.color = UIColor.white
light.shadowMode = .deferred
light.shadowSampleCount = 8
light.shadowRadius = 1
// light.automaticallyAdjustsShadowProjection = false
light.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.75)
light.categoryBitMask = -1
return light
}
Run Code Online (Sandbox Code Playgroud)
以及我如何添加它:
func setupLights() {
lightDirectionNode.light = Lighting.directionalLight()
// lightDirectionNode.eulerAngles = SCNVector3(-66.degreesToRadians, 0, 0) …Run Code Online (Sandbox Code Playgroud) 我正在尝试在场景中使用聚光灯并向对象添加阴影。然而,我注意到当我增加 时spotInnerAngle,物体的阴影会发生显着变化。这是一个例子:
这些图像中的两个阴影看起来完全不同 \xe2\x80\x93 有谁知道为什么增加聚光角会导致阴影不那么明显?
\n\n这是我用来创建聚光灯/向场景添加阴影的代码:
\n\n let spotLight = SCNNode()\n spotLight.light = SCNLight()\n spotLight.light?.type = SCNLight.LightType.spot\n spotLight.light?.spotInnerAngle = 120\n spotLight.light?.spotOuterAngle = 120\n spotLight.light?.color = UIColor.white\n spotLight.light?.castsShadow = true\n spotLight.light?.automaticallyAdjustsShadowProjection = true\n spotLight.light?.shadowSampleCount = 32\n spotLight.light?.shadowRadius = 8\n spotLight.light?.shadowMode = .deferred\n spotLight.light?.shadowMapSize = CGSize(width: 2048, height: 2048)\n spotLight.light?.shadowColor = UIColor.black.withAlphaComponent(1)\n spotLight.position = SCNVector3(x: 0,y: 5,z: 0)\n spotLight.eulerAngles = SCNVector3(-Float.pi / 2, 0, 0)\nRun Code Online (Sandbox Code Playgroud)\n 我想在 ARKit 中构建一个演示应用程序,并且我对 Beta 版当前可能实现的功能有一些疑问(Apple 一直将其称为 RealityKit 或 ARKit 3.0)。
我正在尝试构建的演示应用程序应执行以下操作:
识别真实环境中的物体或图像,并在那里创建一个锚点
渲染附加到锚点的虚拟模型
让虚拟模型呈现遮挡
让虚拟模型与锚图像/对象一起移动
我尝试改编早期版本(利用 SceneKit 的 ARKit 2.0)中的一些代码,但某些功能(如人物遮挡)不是 ARKit 2.0 的一部分。
由于 Apple 一直在迭代他们的测试版,因此在他们的网站上和 WWDC 2019 上宣传的许多功能似乎已经从 RealityKit 的文档中消失了(人物遮挡、身体跟踪、世界跟踪)。
根据我的理解,ARKit 2.0 可以实现第 (1) 和 (2) 项。第 (3) 项尽可能与测试版一起宣传,但我几乎看不到任何文档。
在最新的测试版中可以这样做吗?如果是这样,最好的方法是什么?如果没有,是否有任何解决方法,例如混合新旧 API 之类的?
我不知道如何从带有后置 ToF 深度传感器的小米红米 Note 8 Pro 获取原始深度数据。
我试过了:
我的目标是计算锚定到某些的垂直平面的“可见”部分,ARPlaneAnchor并用四边形表示它,如下图所示:
我目前的方法是基于很少的命中测试,不幸的是,这似乎没有给我令人满意的结果。
首先,当我检测到 a 时,我会在其主节点上ARPlaneAnchor添加一个大的隐形SCNNode。
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
guard let planeAnchor = anchor as? ARPlaneAnchor else { return }
let planeNode = SCNNode(geometry: SCNPlane(width: 100.0, height: 100.0))
planeNode.name = "infinite_plane"
planeNode.position = SCNVector3(planeAnchor.center.x, planeAnchor.center.y, planeAnchor.center.z)
planeNode.eulerAngles = SCNVector3(-0.5 * .pi, 0, 0)
planeNode.geometry?.firstMaterial?.diffuse.contents = UIColor.clear
node.addChildNode(planeNode)
node.enumerateChildNodes { childNode, _ in
childNode.removeFromParentNode()
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当需要计算垂直平面的可见部分时(时间无关紧要,可以在一些屏幕触摸之后或每次渲染新帧时)我取屏幕中心并执行一些命中测试.
let center = CGPoint(x: sceneView.bounds.midX, y: sceneView.bounds.midY)
let hitTestResults = sceneView.hitTest(center, …Run Code Online (Sandbox Code Playgroud)