swift - SceneKit:旋转节点但定义目标角度
问题描述
编辑:我已经解决了这个问题,并将在接下来的几天内发布解决方案。
我正在构建类似于 Apple 的 Activity 应用程序的 3D 成就。
我已经加载了我的 3D 模型(带有单个节点的场景),可以显示它,并且可以点击它来施加旋转力:
@objc func objectTapped(_ gesture: UITapGestureRecognizer) {
let tapLocation = gesture.location(in: scnView)
let hitResults = scnView.hitTest(tapLocation, options: [:])
if let tappedNode = (hitResults.first { $0.node === badgeNode })?.node {
let pos = Float(tapLocation.x) - tappedNode.boundingBox.max.x
let tappedVector = SCNVector4(x: 0, y: pos, z: 0, w: 0.1)
tappedNode.physicsBody?.applyTorque(tappedVector,
asImpulse: true)
}
}
这工作正常。现在到棘手的部分:
我希望节点旋转直到它显示其正面或背面(如在活动应用程序中),然后它应该停止。它应该自然停止,这意味着它可以稍微过冲然后返回。
用图片来描述它——在这里我将节点保持在这个位置......
...如果我放开节点,它将旋转以显示正面,其中包括一点点过冲。这是结束位置:
由于我对 SceneKit 还很陌生,所以我很难弄清楚如何实现这种效果。似乎我可以通过使用像重力场这样的 SceneKit 对象来实现这一点,而不必自己计算很多东西,或者至少这是我所希望的。
我不一定要求一个完整的解决方案,我基本上只需要一个正确的方向。提前致谢!
解决方案
推荐阅读
- python - Scrapy:仅关注外部链接
- php - Laravel 背包,在列中显示地址(Json)
- javascript - 有没有什么地方 defaultChecked 比仅仅引用 checked 更有利?
- bash - 在 Bash 中将变量输出到 CSV 文件的帐户
- reactjs - React - 链接重定向到项目但不刷新组件
- php - 网络服务器不监听端口
- ruby-on-rails - Nginx 和乘客根指令不适用于 Capistrano 3。当前版本的符号链接中断应用程序
- c# - 如果在应用程序资源中设置,为什么网格背景颜色会覆盖整个窗口?
- google-chrome-extension - Chrome .webRequest 未按预期触发
- weblogic12c - Weblogic服务器中的Alfresco 5.2.4