【问题标题】:How do I get the picture to stick to the wall?如何让图片贴在墙上?
【发布时间】:2020-04-29 14:28:55
【问题描述】:

我用的是arkit和realitykit,先加载一个房间,然后把图片贴在墙上,但是怎么让它贴在墙上呢? 如何获得图片的正确旋转? 有四种可能,墙的正面:z+, z-, x+, x-,

【问题讨论】:

    标签: ios arkit


    【解决方案1】:

    场景工具包

    回答您的第一个问题,要使节点粘在特定位置,您只需保留所需位置并添加节点,除非您将其删除,否则它不应消失。当你改变手机方向和位置时,它可能会上下移动一点,但不会太多

    node.position = SCNVector3(x, y, z)
    

    如果您使用触摸来定义位置,我建议您考虑使用 sceneView.hitTest()touchesBegan() 函数

    至于旋转,您只需在感兴趣的节点上沿任何轴和任何需要的方向使用欧拉角

    node.eulerAngles.x = -.pi / 2
    

    另外,我强烈推荐你 “App Development with Swift” 来自 Apple Education,2019 年。在本书中有一整章是关于 ARKit,除了回答你的问题之外,它还有许多有用的技术和想法

    Here 你可以从使用 Swift 的 App 开发一书中找到本章末尾指导项目的实现,但自己动手会更有用

    RealityKit

    给定here,您可以使用两个选项之一进行轮换

    let boxAnchor = try! Experience.loadBox()
    
    boxAnchor.steelBox?.orientation = simd_quatf(angle: .pi/4, axis: [0, 0, 1]) 
    

    对于角度属性,您插入要以弧度为单位旋转对象的程度,对于轴属性,您选择要围绕旋转的轴。

    另一种选择是使用变换

    boxAnchor.steelBox?.transform = Transform(pitch: 0, yaw: 0, roll: .pi/4) 
    

    Roll、pitch 和 yaw 表示沿特定轴的旋转,更多写为here

    要更改位置,您可以再次使用变换的翻译

    steelBox.transform.translation = [0, 0, -0.5]
    

    这将根据给定的参数翻译您的对象。这个函数严重依赖affine transforms

    关于转换 w.r.t.其他对象

    SceneKit 中的节点以及 RealityKit 中的实体相对于父节点或实体进行变换和旋转。

    因此,就您而言,您有一个大模型,您计划在其中放置较小的对象。

    你有两个选择,要么在大模型(房子)上使用触摸检测,然后他们手动计算应该放置对象的位置,这可能非常麻烦。

    另一种选择是在预定义的位置添加小的透明平面,然后在它们上添加触摸检测。这样你就可以省略计算较小的对象应该放在哪里

    祝你好运!

    【讨论】:

    • @zhoujunhua 我也添加了真人秀资料
    • 谢谢,您的回答是关于“如何旋转对象”。那么如何在墙上自动粘贴绘画,确保绘画的方向是正确的。在 realitykit 中是否有关于“使从正常旋转”的内容
    • @zhoujunhua 非常欢迎您)您能否详细说明“从正常旋转”的确切含义?因为沿着这三个轴旋转你的对象可以给你任何想要的位置
    • 这个问题和我的描述一致:forum.unity.com/threads/…
    猜你喜欢
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    相关资源
    最近更新 更多