修改三维模型的边界框大小

这个function应该是在一个狭窄的空间里添加一个3D模型来屏幕:

func addCharacter(gridPosition: SCNVector3, levelNode: SCNNode){ let carScene = SCNScene(named: "assets.scnassets/Models/cube.dae") // Create a material using the model_texture.tga image let carMaterial = SCNMaterial() carMaterial.diffuse.contents = UIImage(named: "assets.scnassets/Textures/model_texture.tga") carMaterial.locksAmbientWithDiffuse = false // Create a clone of the Car node of the carScene - you need a clone because you need to add many cars let carNode = carScene!.rootNode.childNodeWithName("Cube", recursively: false)!.clone() as SCNNode carNode.name = "Cube" carNode.position = gridPosition // Set the material carNode.geometry!.firstMaterial = carMaterial // Create a physicsbody for collision detection let carPhysicsBodyShape = SCNPhysicsShape(geometry: SCNBox(width: 0.30, height: 0.20, length: 0.16, chamferRadius: 0.0), options: nil) carNode.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.Kinematic, shape: carPhysicsBodyShape) carNode.physicsBody!.categoryBitMask = PhysicsCategory.Car carNode.physicsBody!.collisionBitMask = PhysicsCategory.Player levelNode.addChildNode(carNode) } 

如果我在将dae文件添加到Xcode之前更改其尺寸,代码将起作用,而维度是指Xcode的Bounding Box Size属性。 我想知道是否有可能直接从Xcode改变这个边界框的大小。 从用户界面看似乎不可能。 这是可能的代码? 或者,甚至更好的是,将对象保持比例缩小到0.3至0.7之间的XYZ大小。 目前,我的物品显示XYZ的箱子尺寸超过45。 此外,如果我要在上面的代码中使用.scn文件而不是.dae,那么还能工作吗?

编辑:如果我通过代码更改大小,是否会影响效率? 我注意到,对于更大的.dae模型,fps从60下降到30,游戏变慢。

改变carNodescale财产将减less汽车的外观尺寸。

不过,我想你会提前将你的.DAE加载到Xcode场景编辑器中。 这将允许您提前缩放(在“节点检查器”中,option-command-3)。 你也可以,如果你想添加你的纹理。 然后将其保存为压缩的.SCN文件,并加载速度更快。

在代码或Xcode场景编辑器中更改缩放比例不会影响效率。 尽pipe如此,降低汽车的复杂性(多边形/顶点的数量)将会加快速度。

考虑为您的汽车节点创buildSCNLevelOfDetail实例。 这会导致渲染器在节点远离相机时使用替代,较低分辨率的几何体。 WWDC 2014幻灯片演示了这个幻灯片38,AAPLSlideLOD.m。