- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这几天我一直在努力解决这个问题。
给定一个基于 ARKit 的应用程序,我可以在其中跟踪用户的面部,我如何才能从它的 anchor 获得面部的绝对旋转?
我可以获得 ARAnchor 的变换,它是一个 simd_matrix4x4。有很多关于如何从该矩阵(它是第 3 列)中获取位置的信息,但没有关于旋转的信息!
我希望能够通过传递 YAW、PITCH 和 ROLL 来控制应用程序外部的 3D 对象。
我尝试过的最新的东西实际上有点管用:
let arFrame = session.currentFrame!
guard let faceAnchor = arFrame.anchors[0] as? ARFaceAnchor else { return }
let faceMatrix = SCNMatrix4.init(faceAnchor.transform)
let node = SCNNode()
node.transform = faceMatrix
let rotation = node.worldOrientation
rotation.x .y 和 .z 具有我可以使用的值,但是当我移动手机时这些值会发生变化。例如,如果我转动 180˚ 并继续看着手机,值会根据手机的位置发生巨大变化。
我尝试在 ARConfiguration 中更改世界对齐方式,但这并没有什么不同。
我是否读取了错误的参数?这应该容易得多!
最佳答案
我想通了...
有了面部 anchor 后,需要对其变换矩阵和相机变换进行一些计算。
像这样:
let arFrame = session.currentFrame!
guard let faceAnchor = arFrame.anchors[0] as? ARFaceAnchor else { return }
let projectionMatrix = arFrame.camera.projectionMatrix(for: .portrait, viewportSize: self.sceneView.bounds.size, zNear: 0.001, zFar: 1000)
let viewMatrix = arFrame.camera.viewMatrix(for: .portrait)
let projectionViewMatrix = simd_mul(projectionMatrix, viewMatrix)
let modelMatrix = faceAnchor.transform
let mvpMatrix = simd_mul(projectionViewMatrix, modelMatrix)
// This allows me to just get a .x .y .z rotation from the matrix, without having to do crazy calculations
let newFaceMatrix = SCNMatrix4.init(mvpMatrix)
let faceNode = SCNNode()
faceNode.transform = newFaceMatrix
let rotation = vector_float3(faceNode.worldOrientation.x, faceNode.worldOrientation.y, faceNode.worldOrientation.z)
rotation.x .y 和 .z 将返回面部的俯仰、偏航、滚动(分别)
我添加了一个小的乘数并将轴的 2 反转,所以它最终是这样的:
yaw = -rotation.y*3
pitch = -rotation.x*3
roll = rotation.z*1.5
呸!
关于swift - 我怎样才能绝对地获得 ARAnchor 的偏航、俯仰和滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53352476/
我现在没有 iPhone 4,我正在尝试找到一个文档来显示偏航、俯仰和滚动的范围以及设备的相应位置。 我知道加速度计的变化范围是 -1 到 +1,但昨天在我的 iPhone 上进行的测试显示,横滚的变
我有两个不同的系统(引擎 A、引擎 B)。引擎 A(运动跟踪软件)生成(偏航、俯仰、横滚),引擎 B(Cinema 4D)期望(航向、俯仰、倾斜)。 我的研究得出的结果是这两个系统之间没有区别。 Ya
如何通过 Quartz 以编程方式将矩形从正面朝上(在 2D 中显示为线)设置为全高? 以下(请原谅粗略的绘图)是我想要得到的:一副卡片(线),卡片旋转到全高。我没有任何调整视角的方法。 可能的作案手
我想找出 iPad 1 上的俯仰、偏航和滚动。由于没有 deviceMotion 工具,我可以从加速度计中获取这些数据吗?我假设我可以使用它返回的向量与引用向量(即重力)进行比较。 iOS 会检测设备
我在 WorldWind 中有一个 3D 飞机模型,这是一个在 OpenGL Java 上运行的 3D 地球模型。我使用数据库中的数据(包括纬度、经度和替代度)更新此模型的位置。如何从当前位置获取航向
我将 Cesium 的一个模型加载到场景中,我有两个点要用来计算模型的方向,这是我创建的函数。 // calculate the direction which the model is facing
几个小时以来,我一直在努力解决这个问题,但我根本想不出一个解决方案:我想要实现的是将方向 vector 转换为 3 glm::rotation调用。 我有一个位于 (0, 0, 0) 的圆柱体,具有一
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我正在使用 CMMotionManger 通过以下代码获取偏航读数。无论 UIInterfaceOrientation 如何,如果向右偏航 90 度,我都会尝试获取负 1.5708 rad 的读数;如
我有一个基于提供的纬度/经度坐标、缩放、偏航和俯仰的谷歌地图和街景。我需要调用一个 javascript 来为每个值更新一个隐藏字段,每当任何细节从它们的默认值发生变化或当一个按钮被点击时。 因此,无
我有一个 CMRotationMatrix *rot,我想从矩阵中获取俯仰、偏航和滚动。我有什么想法可以做到这一点吗? 谢谢 最佳答案 使用四元数比使用欧拉角更好....滚转、俯仰和偏航值可以使用以下
在 Android 中,我可以使用 GAME_ROTATION_VECTOR 传感器获取设备的偏航、滚动和俯仰。 我需要在 Flutter 中做同样的事情,但除了 sensors 之外我找不到任何东西
如何通过 Eigen 库使用俯仰、偏航、滚动创建旋转矩阵? 最佳答案 鉴于我无法找到执行此操作的预构建函数,我构建了一个,以防将来有人发现此问题 Eigen::AngleAxisd rollAngle
我已经研究了一段时间,现在我必须决定走哪条路。 矿山要求:需要知道设备相对于真实航向(地理北极,而非磁极)的方向。为此,我必须使用指南针,现在我必须决定其他的东西,加速度计或陀螺仪。 因为这对我来说是
我的问题 我想用 3x3 旋转矩阵旋转一个 mayavi.mlab.imshow 对象。我能找到的唯一旋转此对象的方法是将对象的 actor.orientation 设置为 [pitch, roll,
我是一名优秀的程序员,十分优秀!