• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - ARKit - 在用户的电话方向上施加力量

[复制链接]
菜鸟教程小白 发表于 2022-12-13 15:28:21 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有以下代码创建一个 SCNBox 并将其拍摄到屏幕上。这行得通,但只要我将手机转向任何其他方向,力脉冲就不会更新,它总是会在相同的旧位置射击盒子。

代码如下:

@objc func tapped(recognizer :UIGestureRecognizer) {

        guard let currentFrame = self.sceneView.session.currentFrame else {
            return
        }

        /
        let box = SCNBox(width: 0.2, height: 0.2, length: 0.2, chamferRadius: 0)

        let material = SCNMaterial()
        material.diffuse.contents = UIColor.red
        material.lightingModel = .constant

        var translation = matrix_identity_float4x4
        translation.columns.3.z = -0.01

        let node = SCNNode()
        node.geometry = box
        node.geometry?.materials = [material]

        print(currentFrame.camera.transform)

        node.physicsBody = SCNPhysicsBody(type: .dynamic, shape: nil)

        node.simdTransform = matrix_multiply(currentFrame.camera.transform, translation)
        node.physicsBody?.applyForce(SCNVector3(0,2,-10), asImpulse: true)

        self.sceneView.scene.rootNode.addChildNode(node)


    }

第 26 行是我施加力的地方,但它没有考虑用户当前的手机方向。我该如何解决?



Best Answer-推荐答案


在第 26 行,您将一个常量向量传递给 applyForce。该方法在世界空间中采用一个向量,因此传递一个常量向量意味着您始终在同一方向上施加力 - 如果您想要一个基于相机或其他东西指向的方向的方向,您需要根据该方向计算向量。

(新)SCNNode 属性 worldFront在这里可能会有所帮助 - 它为您提供节点指向的方向,自动转换为世界空间,因此它对物理方法很有用。 (尽管您可能想要对其进行缩放。)

关于ios - ARKit - 在用户的电话方向上施加力量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44610512/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap