0

我对 SceneKit 非常陌生,非常感谢您的帮助!
我的 UIView 中有一个 200x200 大小的 SCNView,它位于超级视图的中心。我想在里面放一个 SCNCylinder,这样 SCNCylinder 就可以覆盖整个 SCNView。我读到 Scenekit 的所有这些视图都是以米为单位定义的,那么如何在屏幕尺寸和 SCNCylinder 之间建立关系。

我试过了:

var coinNode = SCNNode()
let coinGeometry = SCNCylinder(radius: 100, height: 2)
coinNode = SCNNode(geometry: coinGeometry)
coinNode.position = SCNVector3Make(0, 0, 0)
coinScene.rootNode.addChildNode(coinNode)

let rotate90AboutZ = SCNAction.rotateByX(-CGFloat(M_PI_2), y: 0.0, z: CGFloat(M_PI_2), duration: 0.0)
coinNode.runAction(rotate90AboutZ)
ibOutletScene.scene = coinScene

但这在我的 coinScene 和 ibOutletScene 之间留有余量。如何删除这个空间?

我也尝试添加相机:

let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3Make(0, 0, 100)
coinScene.rootNode.addChildNode(cameraNode)

但是我看到了随机行为,并且 coinNode 被隐藏了!我应该如何定位我的相机?或者有没有其他方法可以从我的 ibOutletScene 中删除多余的空间?

编辑:如果我不添加相机,这就是它的外观。红色场景和绿色硬币之间有一个边缘。我尝试了多种尺寸的硬币,但除非我添加相机,否则我无法删除此边距。但是,如果我添加相机,我会遇到另一个问题,在这个截图下面提到。 红色是场景和绿色硬币,如何去除两者之间的边距

如果我不添加相机,硬币上的旋转动画效果很好,但是如果我添加相机,旋转会放大然后随着动画再次变小。如何在不增加尺寸的情况下沿其轴旋转它?我正在使用以下代码来旋转硬币:相同的代码在没有相机的情况下也可以正常工作,但在添加相机后会放大硬币。签出快照。

let rotate = SCNAction.rotateByX(0, y: -2 * CGFloat(M_PI_2), z: 0,    duration: 2)
    coinNode.runAction(rotate)

在此处输入图像描述

4

1 回答 1

0

随机行为可能是由您的第一个代码片段中的最后一行引起的。您正在启动动画,然后将场景添加到视图中。

相反,构建您的场景,将其附加到视图,然后开始您的动画。为动作设置非零持续时间将为您提供更令人愉悦的过渡。

至于额外的空间,如果您发布屏幕截图将有助于我们理解。但是你将不得不做一些三角学。

看起来你有一个场景,你想被一个硬币挡住,然后旋转出来?用真实的物体模拟自己。把你的眼睛放在桌子的边缘。把硬币从你的眼睛里拿出来。为了将特定物体挡在桌子上更远的地方,那枚硬币必须有多远?

在 SceneKit 中,您可以查询 SCNCamera 的视野。您知道硬币的大小和视图的大小。计算硬币的投影直径与您的视野宽度相等所需的相机距离。把硬币放在那里。

于 2016-10-21T19:04:07.513 回答