Как разместить SCNNode, чтобы покрыть весь SCNView?

Я очень новичок в SceneKit, и ваша помощь будет очень признательна!
У меня есть SCNView размером 200x200 в моем UIView, который находится в центре супер просмотра. Я хочу поместить 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)

введите описание изображения здесь

1 ответ

Случайное поведение может быть вызвано последней строкой в ​​вашем первом фрагменте кода. Вы запускаете анимацию, а затем добавляете сцену в представление.

Вместо этого постройте свою сцену, прикрепите ее к представлению и запустите анимацию. Установка ненулевой продолжительности для действия даст вам более приятный переход.

Что касается дополнительного места, это поможет нам понять, если вы разместите скриншот. Но вам придется сделать немного тригонометрии.

Похоже, у вас есть сцена, которую вы хотите заблокировать монетой, которая затем вращается? Имитация этого с реальными объектами. Положи глаз на край стола. Выложите монету из глаз. Как далеко должна находиться эта монета, чтобы блокировать отдельные предметы на вашем столе?

В SceneKit вы можете запросить поле зрения SCNCamera. Вы знаете размер вашей монеты и размер вида. Рассчитайте расстояние от камеры, необходимое для проецируемого диаметра вашей монеты, чтобы оно равнялось ширине вашего обзора. Положи монету туда.

Другие вопросы по тегам