在SceneKit中使用Vuforia提供的投影矩阵和标记姿势

2024-01-21

目前,我正在尝试解决在 SceneKit 中渲染时投影矩阵和帧标记姿势的使用问题。场景中的模型和相机图像背景显示没有问题。然而,一旦我更改投影矩阵和帧标记姿势矩阵以匹配 Vuforia,所有内容都会被推到屏幕外。

func didUpdateProjectionMatrix(projectionMatrix: matrix_float4x4)
{
    let extrinsic = SCNMatrix4FromMat4(projectionMatrix)
    let camera = self.cameraNode?.camera
    camera?.setProjectionTransform(extrinsic)
}

func didUpdateFramemarkers(framemarkers: [Framemarker]?)
{
    guard let framemarkers = framemarkers else {
        return
    }

    for framemarker in framemarkers {
        let pose = SCNMatrix4Invert(SCNMatrix4FromMat4(framemarker.pose))
        self.objectNode?.transform = pose
    }
}

这是设置 SCNCamera 和对象节点的正确方法吗?设置 Vuforia 帧标记以与 SceneKit 配合使用还需要其他什么吗?


它就是有效的!

困难的部分是确定需要哪些 SceneKit 部分才能完成这项工作。原来我读过这篇文章使用 Scenekit + Vuforia 轻松制作增强现实应用程序 http://qiita.com/akira108/items/a743138fca532ee193fe其中概述了如何针对用户定义的目标重新调整示例应用程序。该文章的缺点包括并不总是清楚作者更改了什么,没有提供示例项目,并且它基于旧版本的 Vuforia。最终,我发现没有必要反转姿势矩阵。

绘制相机图像并设置投影矩阵并更新标记位姿

override func viewDidLoad() 
{
    super.viewDidLoad()

    let scene = SmartScanScene()

    let camera = SCNCamera()
    let cameraNode = SCNNode()
    cameraNode.camera = camera
    scene.rootNode.addChildNode(cameraNode)
    _cameraNode = cameraNode

    let view = self.view as! SCNView
    view.backgroundColor = UIColor.blackColor()
    view.showsStatistics = true
    // view.debugOptions = SCNDebugOptions.ShowBoundingBoxes.union(.ShowWireframe)
    view.autoenablesDefaultLighting = true
    view.allowsCameraControl = false
}

func didUpdateProjectionMatrix(projectionMatrix: matrix_float4x4)
{
    let extrinsic = SCNMatrix4FromMat4(projectionMatrix)
    _cameraNode?.camera?.setProjectionTransform(extrinsic)
}

func didUpdateFramemarkers(framemarkers: [Framemarker]?)
{
    guard let framemarkers = framemarkers else {
        return
    }

    for framemarker in framemarkers {
        let pose = SCNMatrix4FromMat4(framemarker.pose)
        self.objectNode?.transform = pose
    }
}

func didUpdateCameraImage(image: UIImage?)
{
    if let image = image {
        _scene?.background.contents = image
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在SceneKit中使用Vuforia提供的投影矩阵和标记姿势 的相关文章

随机推荐

  • 如何在 JSDoc 中描述解构对象参数

    如果我有一个将对象作为参数的 JavaScript 函数 我可以使用 JSDoc 描述该对象的预期属性 如下所示 param bar param bar baz number param bar qux number function fo
  • 没有MMU的内存保护

    我想知道如何在没有 MMU 支持的情况下保护内存 我尝试用谷歌搜索它 但没有看到任何有价值的论文或研究 那些处理它的人只处理错误 例如未初始化的指针 而不是由于软错误而导致的内存损坏 即由于硬件瞬态故障损坏了写入内存位置的指令 我想知道这一
  • 如何在 Spring hibernate 项目中忽略 json jackson 中的 "handler": {}, "hibernateLazyInitializer": {} ?

    我将 fastxml json 与对象映射器一起使用 下面是我的代码 ObjectMapper mapper new ObjectMapper mapper configure SerializationFeature FAIL ON EM
  • 获取 ORA-01033: ORACLE 初始化或关闭正在进行中

    昨天我在笔记本电脑上安装了 Oracle 12c 企业版 当我尝试通过 SQLPLUS 连接到数据库时 出现以下错误 C Users USER gt sqlplus SQL Plus Release 12 1 0 2 0 Productio
  • 错误 1329:无数据 - 提取、选择或处理零行 - 即使所有操作均正确

    在下面 即使所有操作都正确完成 我也会收到 错误 1329 无数据 提取 选择或处理零行 我的其他功能可以正常工作 几天前这个功能也可以正常工作 BEGIN DECLARE Id INT 10 DEFAULT 0 DECLARE Elm I
  • 检查 X509 证书吊销

    是否可以检查任何 X509 证书是否被吊销 实际上 我制作了一个 Java 应用程序 它只获取常规 https 链接并输出 X509 证书 我想在我的应用程序中添加一项服务来检查该证书是否已被吊销 是否有教程或简单的代码可以指导我做到这一点
  • Python Eve - 使用 objectid 的 where 子句

    我在 settings py 中定义了以下资源 builds item title builds schema sources type list schema type objectid data relation resource so
  • 使用 jersey-spring3 从 JerseyTest 容器中检索托管 bean

    这个问题是上一个问题的后续问题指定自定义应用程序上下文 https stackoverflow com questions 18278769 specify custom application context 我们正在将一些数据服务从使用
  • 启动“com.twitter.android.PostActivity”时出错

    我向 Twitter 调用了共享文本的意图 在不更改代码的情况下 一天又一天 此调用已停止工作 意图是 Intent share new Intent Intent ACTION VIEW share setClassName com tw
  • Azure 中的 REST API 日志

    是否有办法查看通过 REST API 完成的所有请求 我希望能够监视客户端 ID 完成的 REST API 调用 我想了解调用了哪些特定 API 如果可能的话 每个调用的请求 响应是什么样的 只是将其发布在这里以帮助将来的问题发布者 这是您
  • 将类切换绑定到窗口滚动事件

    当用户将浏览器窗口滚动到某个点以下时 我将切换 page div 的类 到目前为止我所做的工作正常 http jsfiddle net eTTZj 29 http jsfiddle net eTTZj 29 div div
  • 插入/删除触发器表上的慢连接

    我们有一个触发器 可以为表创建审计记录并连接inserted and deleted表以查看是否有任何列已更改 连接对于小型集合一直运行良好 但现在我要更新大约 100 万行 并且几天之内就不会完成 我尝试更新具有不同数量级的选定行数 很明
  • Android - 未找到活动异常

    我正在使用 startActivity 调用另一个 Activity 但收到 Activity Not Found Exception 这是我的代码 TextView textView TextView itemClicked String
  • 我想在服务器上 24/7 运行 Python 脚本 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在制作一个模拟虚拟货币股票市场的程序 我还没有尝试过任何东西 但我想要一个Python脚本能够24
  • 数据库时区问题

    我在尝试与数据库 MySQL 建立连接时收到此错误 java sql SQLException 服务器时区值 CEST 无法识别或代表多个时区 如果要利用时区支持 则必须配置服务器或 JDBC 驱动程序 通过 serverTimezone
  • 为什么我的 Mac (OS X 10.7.3) 有旧版本 (2.3) 的 Gnu Bison?

    我的 mac 上的 GNU Bison 版本是 2 3 但我知道 Bison 2 5 很久以前就发布了 这本书弗莱克斯和野牛使用2 5版本 我应该自己升级到2 5吗 有必要吗 2 3和2 5有什么区别 我在 MacOSX 10 9 5 上遇
  • 是否有任何架构使用相同的寄存器空间来进行标量整数和浮点运算?

    我见过的大多数支持本机标量硬件 FP 支持的架构将它们推入完全独立的寄存器空间 与主寄 存器集分开 我见过的大多数支持本机标量硬件 FP 支持的架构将它们推入完全独立的寄存器空间 与主寄 存器集分开 X86 的传统 x87 FPU 使用带有
  • 应该是 DDD 中域的本地化部分

    在遵循 DDD 概念的同时 我正在努力决定是否应该让我的域本地化意识 我提出了两个解决方案来解决这个问题 两者都使域本地化能够在不同的地方实现 我是否应该将本地化文本放入域中 分享您对此问题的解决方案或我的两个示例的优缺点 谢谢 实施例1
  • 内存管理、堆损坏和 C++

    所以 我需要一些帮助 我正在开发一个 C 项目 然而 我认为我已经设法破坏了我的堆 这是基于我添加了一个事实std string给一个类并为其分配另一个类的值std string std string hello Hello world n
  • 在SceneKit中使用Vuforia提供的投影矩阵和标记姿势

    目前 我正在尝试解决在 SceneKit 中渲染时投影矩阵和帧标记姿势的使用问题 场景中的模型和相机图像背景显示没有问题 然而 一旦我更改投影矩阵和帧标记姿势矩阵以匹配 Vuforia 所有内容都会被推到屏幕外 func didUpdate