首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你知道如何用ARKIT旋转三维模型来面对摄像机吗?

你知道如何用ARKIT旋转三维模型来面对摄像机吗?
EN

Stack Overflow用户
提问于 2018-01-12 09:22:59
回答 1查看 3K关注 0票数 5

我有两个问题在头脑中放置三维物体。

  1. 如果一个3D物体(例如汽车)被创建成面对汽车的车门一侧作为摄像机的正面,我如何旋转这个3D物体使其正常?比如,旋转汽车,使汽车的发动机侧作为摄像机的正面。

2.如何将物体面向摄像机,将三维物体置于平面表面。移动手机摄像头可以看到物体的背面。

我正在使用XCode 9.1和iOS 11及以上版本,ARKIT

EN

回答 1

Stack Overflow用户

发布于 2018-01-12 13:29:42

要旋转汽车节点,您只需调整eulerAngles,直到汽车面对摄像机。

代码语言:javascript
复制
  node?.eulerAngles = SCNVector3Make(0,Float(degToRadians(degrees:180 )),Float(degToRadians(degrees: 90)))

把这辆车转到前面。

eulerAngles是以弧度表示的,因此可以方便地转换为学位:

代码语言:javascript
复制
public func degToRadians(degrees:Double) -> Double
 {
    return degrees * (M_PI / 180);
  }

您还可以使用动画在van节点上执行相同的旋转操作。

代码语言:javascript
复制
    let rotate = SCNAction.rotateBy(x: CGFloat(degToRadians(degrees: -90)), y: 0, z: 0, duration: 1)
    node.runAction(rotate)

您可以使用SCNLookAtConstraint,它沿着parentNode的负z轴跟随pointOfView。

所以如果汽车的负z轴是对着侧门的摄像头.当你旋转相机的时候,在车周围.这辆车会一直旋转,一直保持着这样的视野。

代码语言:javascript
复制
  let constraint = SCNLookAtConstraint(target:sceneView.pointOfView)
    constraint.isGimbalLockEnabled = true
    node.constraints = [constraint]

在Xcode内部,下面的屏幕截图显示了如何使用euler角(以红色突出显示)改变货车的旋转。视图应该是“正面”摄像机(也用红色突出显示)。动画也可以通过动画面板在Xcode中完成,选择“旋转动作”&拖动到-middle底部的动作时间线中。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48223069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档