Tag: scenekit

iOS恢复相机投影

我正在尝试估算与空间QR码相关的设备位置。 我使用的是iOS11中引入的ARKit和Vision框架,但这个问题的答案可能不依赖于它们。 使用Vision框架,我可以获得在相机框架中绑定QR码的矩形。 我想匹配这个矩形的设备翻译和旋转所需的QR码从一个标准的位置转换。 例如,如果我观察框架: * * B C A D * * 而如果我离QR码1m远,就以它为中心,假设QR码的边长为10cm,我会看到: * * A0 B0 D0 C0 * * 这两个帧之间的设备转换是什么? 我知道一个确切的结果可能是不可能的,因为也许观察到的QR码是非平面的,我们试图估计一个不完全的东西的仿射变换。 我猜sceneView.pointOfView?.camera?.projectionTransform比sceneView.pointOfView?.camera?.projectionTransform?.camera.projectionMatrix更有帮助,因为后面已经考虑到了我不感兴趣的ARKit的变换对于这个问题。 我将如何填写 func get transform( qrCodeRectangle: VNBarcodeObservation, cameraTransform: SCNMatrix4) { // qrCodeRectangle.topLeft etc is the position in [0, 1] * [0, 1] of A0 // expected real world position of the […]

如何在代码中创build一个SceneKit SCNSkinner对象?

我有一个使用SceneKit for iOS 8的Swift应用程序。我从包含由骨架控制的网格的.dae文件加载场景。 在运行时,我需要修改纹理坐标。 使用变换不是一个选项 – 我需要为网格中的每个顶点计算一个不同的,全新的UV。 我知道几何在SceneKit中是不可改变的,而且我读过build议的方法是手动创build一个副本。 我试图做到这一点,但是当试图在代码中重新创buildSCNSkinner时,我总是会崩溃。 崩溃是EXC_BAD_ACCESS C3DSourceAccessorGetMutableValuePtrAtIndex 。 不幸的是,这里没有源代码,所以我不确定它为什么崩溃。 我已经缩小到连接到网格节点的SCNSkinner对象。 如果我没有设置,我不会崩溃,事情似乎正在工作。 编辑:这是一个更完整的崩溃调用堆栈: C3DSourceAccessorGetMutableValuePtrAtIndex C3DSkinPrepareMeshForGPUIfNeeded C3DSkinnerMakeCurrentMesh C3DSkinnerUpdateCurrentMesh __CFSetApplyFunction_block_invoke CFBasicHashApply CFSetApplyFunction C3DAppleEngineRenderScene … 我还没有find关于如何手动创build一个SCNSkinner对象的任何文档或示例代码。 由于我只是基于以前的工作网格创build它,所以不应该太困难。 我正在根据Swift文档创buildSCNSkinner ,将所有正确的东西传递给init。 但是, SCNSkinner中有一个骨架属性,我不知道如何设置。 我把它设置在我正在复制的网格的原始SCNSkinner上的骨架,我认为这应该工作…但它不。 当设置骨架属性时,它似乎不是分配。 在赋值之后立即检查它仍然是零。 作为一个testing,我试图将原始网格的骨架属性设置为其他东西,并且在分配之后它也保持原样。 任何人都可以阐明发生的事情吗? 或者如何手动正确创build和设置一个SCNSkinner对象? 这里是我用来手动克隆一个网格的代码,并用一个新的replace(我没有修改任何源数据在这里 – 我只是想确保我可以创build一个副本在这一点上) : // This is at the start of the app, just so you can […]