如何旋转 SCNBox

2024-04-12

我正在尝试旋转SCNBox我创建使用swipe gestures。例如,当我向右滑动时,该框应旋转 90 度Y-axis当我向左滑动时为-90degs。为了实现这一点,我一直在使用节点的SCNAction.rotateByX方法来执行旋转动画。现在我遇到的问题是沿着任一方向旋转时X-axis or Z-axis在旋转之后Y-axis反之亦然,轴的位置发生变化。

我注意到,在 X、Y、Z 轴上执行的任何旋转都会改变其他轴指向的方向。

示例:默认位置

然后在旋转之后Z-axis:

当然这会带来一个问题,因为现在当我swipe left or right我不再获得欲望效果,因为X-axis and Y-axis现在已经交换了位置。我想知道的是为什么会出现这种情况?是否有办法执行旋转动画而不影响其他轴?

对于我对这个主题缺乏了解,我深表歉意,因为这是我第一次尝试 3D 图形。

解决方案:

func swipeRight(recognizer: UITapGestureRecognizer) {
  // rotation animation
  let action = SCNAction.rotateByX(0, y: CGFloat(GLKMathDegreesToRadians(90)), z: 0, duration: 0.5)
  boxNode.runAction(action)

  //repositoning of the x,y,z axes after the rotation has been applied
  let currentPivot = boxNode.pivot
  let changePivot = SCNMatrix4Invert(boxNode.transform)
  boxNode.pivot = SCNMatrix4Mult(changePivot, currentPivot)
  boxNode.transform = SCNMatrix4Identity
}

我还没有遇到任何问题,但使用完成处理程序可能更安全,以确保在重新定位 X、Y、Z 轴之前完成对 X、Y、Z 轴的任何更改。


我遇到了同样的问题,这是我用来提供所需行为的方法:

func panGesture(sender: UIPanGestureRecognizer) {
    let translation = sender.translationInView(sender.view!)

    let pan_x = Float(translation.x)
    let pan_y = Float(-translation.y)
    let anglePan = sqrt(pow(pan_x,2)+pow(pan_y,2))*(Float)(M_PI)/180.0
    var rotVector = SCNVector4()

    rotVector.x = -pan_y
    rotVector.y = pan_x
    rotVector.z = 0
    rotVector.w = anglePan

    // apply to your model container node
    boxNode.rotation = rotVector

    if(sender.state == UIGestureRecognizerState.Ended) {
        let currentPivot = boxNode.pivot
        let changePivot = SCNMatrix4Invert(boxNode.transform)
        boxNode.pivot = SCNMatrix4Mult(changePivot, currentPivot)
        boxNode.transform = SCNMatrix4Identity
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何旋转 SCNBox 的相关文章

随机推荐

  • Swing JButton Swing 的圆角没有实际 JButton 的功能 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 1 https i stack imgur com rZJjV png 我已经浏览过代码Swing 外观的 Java 文档 http
  • CSS 中区分:通过 Tab 键获得焦点和:通过单击获得焦点

    虽然我很确定我的问题的答案是 做不到 但我想确定一下并在这里问你们 我有一个相当典型的场景 我想通过我的网站启用选项卡 即使用键盘上的选项卡键 用户刚刚点击的项目应该通过 CSS 进行视觉标记 到目前为止 一切都很好 显然 这需要焦点伪类
  • 如何区分未传递的参数和传递错误值的参数?

    我试图找出在 Perl 中区分未传递参数和参数已作为 0 传递的情况的最佳方法 因为它们对我来说意味着不同的事情 通常我喜欢这种歧义 但在本例中我生成 SQL 因此我想用 NULL 替换未定义的参数 但将 0 保留为 0 所以这就是歧义 s
  • 查询 Jenkins 中最后成功的版本号并进行更改

    例子 32 fail 31 stable no change triggered by parent 30 stable with changes 29 fail 我想要返回一个查询30 到目前为止我得到的是 要查询最后一个稳定版本号 ht
  • 通过将函数应用于数据框的每一行来创建具有命名值的列表

    我试图通过将函数应用于数据帧的每一行来获取每个元素都有名称的列表 但无法获得正确的输出 假设这是我想要应用于每一行的函数 format setup name lt function m v s a lt list a paste m mac
  • 如何使用 TensorFlow 加载稀疏数据?

    有一个关于加载稀疏数据的小片段 但我不知道如何使用它 SparseTensors 不能很好地处理队列 如果您使用 SparseTensors 则必须在批处理后使用 tf parse example 解码字符串记录 而不是在批处理之前使用 t
  • Ruby 中的每个自动计数器?

    我想使用 for each 和计数器 i 0 for blah in blahs puts i to s blah i 1 end 有更好的方法吗 Note 我不知道是否blahs是一个数组或一个散列 但必须这样做blahs i 不会让它变
  • 如何让eclipse记住ssh密钥密码?

    我将 Egit 与 Eclipse 结合使用来使用 git 并访问 github 一切工作正常 但我想省略一件事id rsa每次我将提交推送到 github 时都需要输入密钥密码 每次重新启动 Eclipse 并尝试推送时 都会要求我输入密
  • 对齐CSS中旋转的元素

    我尝试旋转页面上的 div 并将其靠在其父元素 在本例中为主体 的左侧 我了解变换原点 但无论我插入什么值 它都无法正确对齐 http jsfiddle net QpHCM http jsfiddle net QpHCM HTML div
  • JSDOC:如何记录函数的内部变量

    有没有办法让 JSDOC 显示函数内部的变量而不使用 命名空间函数前面的注释 我做了一个小测试对象 但它只会显示内部变量k对于最后一个函数 它被声明为命名空间 我想使用 成员 注释和精确 name注释将在下面调用的第二个方法中显示内部变量d
  • 链接网页、Facebook Like 按钮和 Facebook 粉丝页面?

    这可能吗 当有人点击 Facebook Like 按钮时 他 她会与 Facebook 上的朋友分享网页 URL 通过同样的点击 用户也成为该网站 Facebook 粉丝页面的粉丝 Thanks 虽然可以在您的网站上添加喜欢按钮来喜欢您的
  • 在 postgresql 中编写我自己的聚合函数

    我从来没有写过自己的聚合 只写过存储过程 我需要一些建议 我想编写一个自定义聚合 它将返回整数行的最大值并将其增加 10 我该怎么做 我试过这个 CREATE AGGREGATE incremented max v SFUNC max ST
  • 扩展 C# 语言?

    基本上我想知道的是是否有任何方法可以向基于 net 的语言添加新的 语句 我正在寻找的一个例子是类似介绍public class MyClass decoratorOf ClassWithLotsOfMethods并在预编译时将其更改为普通
  • removeAttribute() 不适用于 DOM

    为什么不removeAttribute 删除以下代码中的任何内容 div Element with style div br br
  • Git克隆无法创建文件

    尝试克隆远程 git 存储库 裸 时 我收到如下几个错误 之后 git 停止 error unable to create file frozen email lamson mymailserver run queue mark name
  • Lasso 和 RobustScaler 之后如何对回归预测进行逆变换?

    我试图弄清楚如何在使用 RobustScalar 和 Lasso 后取消缩放数据 大概使用 inverse transform 进行预测 下面的数据只是一个例子 我的实际数据更大 更复杂 但我希望使用 RobustScaler 因为我的数据
  • React router v4 - 在同一路由上渲染两个组件

    我有这些路线
  • 带有一个图标的 ShareActionProvider - 看起来就像一个简单的操作项

    我要显示ShareActionProvider on ActionBar 但具有自定义外观和感觉 只有一个简单的共享图标 没有边框 右侧没有最常用的应用程序图标 但提供弹出菜单与最常用的应用程序 有没有一种简单的方法可以做到这一点而无需实现
  • islice 一次读取 N 行的问题

    我正在尝试使用 from itertools import islice 以便使用 liblas 模块一次从 las 文件中读取多行 我的目标是逐块阅读 按照问题 Python如何一次读取N行 https stackoverflow com
  • 如何旋转 SCNBox

    我正在尝试旋转SCNBox我创建使用swipe gestures 例如 当我向右滑动时 该框应旋转 90 度Y axis当我向左滑动时为 90degs 为了实现这一点 我一直在使用节点的SCNAction rotateByX方法来执行旋转动