我是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)
答案 0 :(得分:0)
随机行为可能是由您的第一个代码段中的最后一行引起的。您正在开始动画,然后将场景添加到视图中。
相反,构建场景,将其附加到视图,然后开始动画。为操作设置非零持续时间将使您获得更愉快的过渡。
至于额外的空间,如果你发布截图,它将有助于我们理解。但是你将不得不做一些三角函数。
看起来你有一个想要被硬币挡住的场景,然后旋转出来?用真实物体模拟自己。把目光放在桌子的边缘。从你的眼睛里拿出一枚硬币。为了阻挡桌面上的特定物体,这枚硬币必须走多远?
在SceneKit中,您可以查询SCNCamera的视野。您知道硬币的大小和视图的大小。计算投影硬币直径所需的相机距离等于视图宽度。把硬币放在那里。