2015-12-18 7 views
10

У меня есть следующие SCNNode:Scale SCNNode в SceneKit

let box = SCNBox(width: 10.0, height: 10.0, length: 10.0, chamferRadius: 0) 
let boxNode = SCNNode(geometry: box) 
boxNode.position = SCNVector3(x: 0, y: 0, z: 0) 

Если я применяю:

boxNode.scale = SCNVector3(x: 0.5, y: 0.5, z: 0.5) 

это, кажется, не имеют никакого влияния на размер коробки. Я проверил это с помощью boxNode.getBoundingBoxMin(&v1, max: &v2). Это всегда одно и то же на экране.

Я что-то упустил? Документы подразумевают, что установка масштаба должна влиять на геометрию узла и, следовательно, быть другого размера.

Спасибо. J.

ответ

5

Я только что испытал на детской площадке, и он отлично работал для меня. Возможно, ваша камера масштабируется, чтобы компенсировать меньший квадрат?

import SceneKit 
import SpriteKit 
import XCPlayground 

let sceneView = SCNView(frame: CGRect(x: 0, y: 0, width: 800, height: 600)) 

XCPlaygroundPage.currentPage.liveView = sceneView 

var scene = SCNScene() 
sceneView.scene = scene 
sceneView.backgroundColor = SKColor.greenColor() 
sceneView.debugOptions = .ShowWireframe 

// default lighting 
sceneView.autoenablesDefaultLighting = true 

// a camera 
var cameraNode = SCNNode() 
cameraNode.camera = SCNCamera() 
cameraNode.position = SCNVector3(x: 15, y: 15, z: 30) 
scene.rootNode.addChildNode(cameraNode) 

let box = SCNBox(width: 10.0, height: 10.0, length: 10.0, chamferRadius: 0) 
let boxNode = SCNNode(geometry: box) 
boxNode.position = SCNVector3(x: 0, y: 0, z: 0) 
scene.rootNode.addChildNode(boxNode) 
let centerConstraint = SCNLookAtConstraint(target: boxNode) 
cameraNode.constraints = [centerConstraint] 

let sphere = SCNSphere(radius: 4) 
let sphereNode = SCNNode(geometry: sphere) 
sphereNode.position = SCNVector3(x:15, y:0, z:0) 
scene.rootNode.addChildNode(sphereNode) 

//boxNode.scale = SCNVector3(x: 0.5, y: 0.5, z: 0.5) 

Раскоментируйте последнюю строку, и вы увидите окно (10 х 10 х 10) переключатель переключатель от того, больше, чем сфера (диаметр 8) быть меньше, чем сфера. Вот он после масштабирования:

enter image description here

+0

Спасибо. Интересно, но когда я запускаю это (тестируется на разных машинах), требуется немного времени для запуска (60 секунд), и я получаю первое изображение (показано выше). Если я раскомментирую строку, я просто получаю белый ящик. Если я запустил его на игровой площадке iOS, я получаю то, что выглядит как открытое исключение GL. Я использую Xcode 7.2, OS/X 10.11.2 –

+0

Да, игровые площадки SceneKit имеют серьезные проблемы с производительностью на некоторых машинах. Я побежал на игровой площадке OS X. Загрузите радар (bugreport.apple.com) с системным профилем (control-option-command-shift-period) и присоедините игровое поле. Вы настраиваете камеру в явном виде или просто используете камеру SceneView по умолчанию? Что произойдет, если вы поместите два узла в свою сцену и масштабируете только один из них? –

+0

Я запускал это в приложении iOS, и он работал, как ожидалось. По какой-то причине игровые площадки не отображают его правильно. Хотел бы я хотя бы сделать это раньше :). У меня должен быть плохой файл DAE, потому что я могу масштабировать кубы и сферы, но не модель, которую я импортирую. Thx Again. –