SceneKit-定位SCNCamera并允许对象旋转

问题描述 投票:0回答:1

我即将完成SceneKit中的第一个项目,但是我在最后几步中苦苦挣扎。共享显示我当前场景的Xcode Simulator的short screen capture video,可能最容易解释我的进步。

如您所截取的屏幕截图所示,我的项目由三个元素组成(这全部由代码完成,我不导入任何外部资产:]]

  1. 外部框(通过每个角通过六个SCNBox对象定义)
  2. 内部太阳(通过SCNTube对象定义的圆和每个“射线”的UIBezierPath对象)
  3. 摄像机的位置
  4. 基于反馈,我有committed the code to GitHub

现在,如屏幕截图所示,相机可以旋转,但是相机和对象的旋转中心未对齐,因此它看起来是偏轴旋转的。

我想去的地方:

  1. 正确的摄像头位置,使合并的框和太阳直接位于摄像头的前面,充满整个屏幕
  2. 保持太阳的位置是固定的(我想已经完成)
  3. 允许框基于触摸输入在x,y和z中围绕太阳自由旋转-这样用户可以“轻拂”框并观看它在太阳周围翻转和旋转
  4. 代码结构简单明了:

class GameViewController: UIViewController {

var gameView: SCNView!
var gameScene: SCNScene!
var cameraNode: SCNNode!
var targetCreationTime: TimeInterval = 0

override func viewDidLoad() {
    super.viewDidLoad()
    initView()
    initScene()   // createSun() and createCube() called here
    initCamera()
}

并且关于相机位置:

   func initCamera() {
        let camera = SCNCamera()
        cameraNode = SCNNode()
        cameraNode.camera = camera
        cameraNode.position = SCNVector3(x: 0, y: 0, z: 0)
        cameraNode.rotation = SCNVector4Make(1, 0, 0, .pi/2)
    }

但是我发现尽管使用了随机的cameraNode.position和cameraNode.rotation值,但相机视图似乎并没有改变。

我的问题

-任何帮助将不胜感激:
  1. 关于重新放置相机的建议(我在做什么错了?!)-在正确的位置,我可以轻松地设置“ gameView.allowsCameraControl = false”
  2. 有关如何使盒子绕太阳轴旋转(在太阳保持固定的情况下的建议)
  3. 伸展目标!任何类型的常规“请查看本教程”都将提供有关材质和照明的信息,并将该视图嵌入到SwiftUI视图中]
  4. 谢谢!

我即将完成SceneKit中的第一个项目,但是我在最后几步中苦苦挣扎。通过共享Xcode的短屏捕获视频,可能最容易解释我的进步...

ios scenekit scnnode scncamera
1个回答
0
投票

在后期为相机使用此答案:57586437,消除相机旋转并关闭相机控制。通过简单的旋转(我将进行一次x,y,z独立旋转来验证它)旋转,这样您就可以知道枢轴点是否正确。默认情况下应该没问题,并且可以在镜头前旋转到位,但这取决于您构建多维数据集的方式。

© www.soinside.com 2019 - 2024. All rights reserved.