在 SceneKit 中缩放 SCNNode

Posted

技术标签:

【中文标题】在 SceneKit 中缩放 SCNNode【英文标题】:Scale SCNNode in SceneKit 【发布时间】:2016-03-25 17:59:39 【问题描述】:

我有以下SCNNode

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.

【问题讨论】:

【参考方案1】:

我刚刚在操场上进行了测试,它对我来说非常有效。也许您的相机正在放大以补偿较小的框?

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 x 10 x 10) 开关从大于球体(直径为 8)切换到小于球体。这是缩放后的样子:

【讨论】:

谢谢。有趣但是当我运行它(在不同的机器上测试)时,它需要安静一段时间才能运行(肯定是 60 秒),我得到了第一张图像(如上所示)。如果我取消注释该行,我只会得到一个白框。如果我在 ios Playground 中运行它,我会得到一些看起来像开放 GL 异常的东西。我正在使用 Xcode 7.2、OS/X 10.11.2 是的,SceneKit Playgrounds 在某些机器上存在严重的性能问题。我在 OS X 操场上跑步。使用系统配置文件 (control-option-command-shift-period) 归档 Radar (bugreport.apple.com) 并附加操场。您是明确设置相机,还是仅使用默认的 SceneView 相机?如果您在场景中放置两个节点并仅缩放其中一个节点会发生什么? 我在 iOS 应用程序中运行了它,它按预期工作。由于某种原因,Playgrounds 无法正确渲染它。我希望我早点这样做:)。我必须有一个错误的 DAE 文件,因为我可以缩放立方体和球体,但不能缩放我正在导入的模型。再次感谢。 您好!这篇文章超级有用!我们有什么办法可以在一段时间内做到这一点以看到它的规模?

以上是关于在 SceneKit 中缩放 SCNNode的主要内容,如果未能解决你的问题,请参考以下文章

SceneKit:缩放 SCNNode 不会按预期量改变大小

在 SceneKit 中禁用相机平移

如何在 Scenekit 的 3D 模型上添加文字(评论)?

SceneKit 相机节点在捏合手势时重置

Swift 3 - SceneKit 获取 3d 模型比例值

在将 SCNPhysicsVehicleWheels 导入 Xcode 之前对其进行缩放