如何使用Swift在SceneKit中调试自定义几何体

Pop*_*nel 2 macos ios scenekit swift

我正在尝试学习如何在SceneKit中创建自定义几何体.但是,我试图制作一个三角形并且它没有显示任何东西.我不知道如何调试这个.有没有办法弄清楚三角形是否有效?我只是不知道从哪里开始.

作为参考,有问题的游乐场代码如下.请注意,它是针对Swift 4编写的,但Swift 3和Swift 4之间的变化非常小,以至于在Swift 3中编译它是微不足道的.

import UIKit
import SceneKit

let points = [
    SCNVector3Make(0, 0, 0),
    SCNVector3Make(0, 10, 0),
    SCNVector3Make(10, 0, 0),
]
let indices = [
    0,2,1,
]

let vertexSource = SCNGeometrySource(vertices: points)
let element = SCNGeometryElement(indices: indices, primitiveType: .triangles)
let geo = SCNGeometry(sources: [vertexSource], elements: [element])
Run Code Online (Sandbox Code Playgroud)

jls*_*ert 9

创建自定义SCNGeometryElements时,索引的类型必须为Int161.我不认为这记录在任何地方.但是当你改变索引的声明时也是如此

let indices: [Int16] = [
    0, 2, 1
]
Run Code Online (Sandbox Code Playgroud)

应该出现三角形.


编辑

1:正如@mnuages所指出的,SceneKit仅支持32位整数作为索引.所以你可以使用Int8,Int16Int32.

  • 哇,我永远不会在一百万年内猜到这一点。谢谢!哦,还有一个重要提示,您实际上可以在 Playgrounds 中快速查看 SCNGeometry 来查看它,而无需将其放置在场景中。便利! (2认同)

mnu*_*ges 5

Int类型文档中我们得到了

在32位平台上,Int与Int32的大小相同,在64位平台上,Int与Int64的大小相同.

因此,在Swift游乐场,你最终会得到Int64.

那是不幸的,因为SceneKit(和Metal)只支持UInt8,UInt16而且UInt32.在调试器控制台中,您应该能够看到SceneKit警告不支持的64位宽索引.