- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在相机几何方面有一定的背景,但我是 Swift 和 ARKit 开发的新手,我对可以返回的不同类型的变换矩阵有点困惑。
特别是,我遵循的一个教程让我将 ARSCNView 抓取为 sceneView
,然后打印 sceneView.pointOfView
.转换
。这向我展示了我的预期:当 session 开始时,4x4 矩阵非常接近标识。
但是,当使用 ARCamera
与每个 ARFrame
相关联,如以下代码片段所示:
extension ViewController: ARSessionDelegate {
func session(_ session: ARSession, didUpdate frame: ARFrame) {
print(frame.camera.transform.transpose)
}
}
我反而得到了一个看起来像的相机矩阵(注意转置是有目的的,因为我更熟悉行优先布局):
[0 1 0 0]
[-1 0 0 0]
[0 0 1 0]
[0 0 0 1]
我已经明确地尝试了 ARWorldAlignment
.gravity
和 .gravityAndHeading
的属性,但在 session 运行时都不会产生预期的单位矩阵。
我还添加了 .showWorldOrigin
调试选项,它显示了我所期望的世界轴:+X 在我的手机右侧,+Y 向上,-Z 向下 View 轴。
我在这里错过了什么?有人可以阐明 ARFrame 返回的变换的坐标系以及它们与 ARSCNView 的坐标系有何不同吗?
最佳答案
唯一的区别在于类型。单位矩阵在任何情况下都是相同的。
但是,旋转矩阵的逆是它的转置
。
SCNMatrix4
// SCNMatrix4 is a typealias of CATransform3D
@IBOutlet var sceneView: ARSCNView!
sceneView.pointOfView?.transform.m41 // camera position x
sceneView.pointOfView?.transform.m42 // camera position y
sceneView.pointOfView?.transform.m43 // camera position z
┌ ┐
| m11 m21 m31 m41 |
| m12 m22 m32 m42 |
| m13 m23 m33 m43 |
| m14 m24 m34 m44 |
└ ┘
float4x4 | simd_float4x4
@IBOutlet var arView: ARView!
arView.cameraTransform.matrix.columns.3.x // camera position x
arView.cameraTransform.matrix.columns.3.y // camera position y
arView.cameraTransform.matrix.columns.3.z // camera position z
// 0 1 2 3 indices
┌ ┐
| 1 0 0 x |
| 0 1 0 y |
| 0 0 1 z |
| 0 0 0 1 |
└ ┘
simd_float4x4
extension ViewController: ARSessionDelegate {
func session(_ session: ARSession, didUpdate frame: ARFrame) {
frame.camera.transform.columns.3.x // camera position x
frame.camera.transform.columns.3.y // camera position y
frame.camera.transform.columns.3.z // camera position z
}
}
┌ ┐
| 1 0 0 x |
| 0 1 0 y |
| 0 0 1 z |
| 0 0 0 1 |
└ ┘
但是,如果您打印 frame.camera.transform
,您将获得列的水平表示:
// 1st column 2nd column 3rd column 4th column
([1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [x, y, z, 1])
关于swift - ARKit 中的 sceneView.pointOfView.transform 和 ARCamera.transform 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64525400/
我正在从具有特定视点的场景创建一个 SCNRenderer。我使用 SCNView 来显示我的观点,当对象场景看起来像我想要的那样时,我将其渲染在离线 openGLContext 中以从中生成图像。这
我正在尝试构建我的第一个 ARKit 应用程序。该应用程序的目的是在相机朝向的方向拍摄小块。现在,这是我的代码。 sceneView.scene.physicsWorld.gravity = SCN
我是 SceneKit 的新手。试图找出如何将 pointOfView 相机重置为其原始缩放/位置,以便它覆盖场景中的所有节点? 最佳答案 @IBOutlet weak var sceneKitVie
为了将物体放在相机前面,我看到有两种方法:使用 camera.transform 和 pointOfView camera.transform 来自 SCNView 和 scnView.session
我正在尝试做一些简单的事情,但我遇到了一个破坏 ARKit 体验的问题。 我想将 3d 模型 (SCNNode) 固定到手机屏幕上的某个位置。我能够做到这一点,但目前的体验似乎很糟糕。当我将我的节点添
这个问题在这里已经有了答案: How to store custom objects with struct in Coredata (3 个答案) 关闭 6 年前。 我有一个带有灯光相机和模型的
我在相机几何方面有一定的背景,但我是 Swift 和 ARKit 开发的新手,我对可以返回的不同类型的变换矩阵有点困惑。 特别是,我遵循的一个教程让我将 ARSCNView 抓取为 sceneView
我是一名优秀的程序员,十分优秀!