2015-12-18 13 views
10

Ho il seguente SCNNode:Scala SCNNode in 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) 

Se applico:

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

sembra avere alcun effetto sulle dimensioni della scatola. Ho controllato questo con boxNode.getBoundingBoxMin(&v1, max: &v2). È sempre lo stesso e appare lo stesso sullo schermo.

Mi manca qualcosa? I documenti implicano che l'impostazione della scala dovrebbe influenzare la geometria del nodo e quindi avere una dimensione diversa.

Grazie. J.

risposta

5

Ho appena provato in un parco giochi e ha funzionato perfettamente per me. Forse la tua videocamera sta eseguendo lo zoom per compensare la scatola più piccola?

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) 

Rimuovere il commento l'ultima riga e vedrete la casella (10 x 10 x 10) Interruttore di essere più grande di sfera (diametro di 8) ad essere più piccola della sfera. Eccolo dopo il ridimensionamento:

enter image description here

+0

Grazie. Interessante, ma quando lo eseguo (testato su macchine diverse) ci vuole un po 'di tempo per funzionare (60 secondi di sicuro) e ottengo la prima immagine (mostra sopra). Se disapprovo la riga, ottengo solo una scatola bianca. Se lo eseguo in un iOS Playground, ricevo qualcosa che sembra un'eccezione GL aperta. Sto usando Xcode 7.2, OS/X 10.11.2 –

+0

Sì, SceneKit Playgrounds ha gravi problemi di prestazioni su alcune macchine. Ho corso in un parco giochi OS X. File a Radar (bugreport.apple.com) con un profilo di sistema (control-option-command-shift-period) e allega il campo da gioco. Stai configurando una videocamera in modo esplicito o semplicemente utilizzando la videocamera SceneView predefinita? Cosa succede se metti due nodi nella scena e ne riduci solo uno? –

+0

L'ho eseguito su un'app per iOS e ha funzionato come previsto. Per qualche motivo Playgrounds non lo rende correttamente. Magari avessi pensato di farlo prima :). Devo avere un file DAE male perché posso ridimensionare cubi e sfere ma non un modello che sto importando. Di nuovo. –

Problemi correlati