Как отладить пользовательскую геометрию в 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])
2 ответа
При создании кастома SCNGeometryElement
s тип индексов должен быть Int16
1 Я не думаю, что это задокументировано. Но когда вы меняете декларацию индексов тоже
let indices: [Int16] = [
0, 2, 1
]
должен появиться треугольник.
редактировать
1: Как отметил @mnuages, SceneKit поддерживает только 32-битные целые числа в качестве индексов. Так что вы можете использовать Int8
, Int16
а также Int32
,
Из документации для типа Int мы получаем, что
На 32-разрядных платформах размер Int совпадает с размером Int32, а на 64-разрядных платформах размер Int совпадает с размером Int64.
Так что в Swift Playground вы в конечном итоге Int64
,
Это печально, потому что SceneKit (и Metal) поддерживают только UInt8
, UInt16
а также UInt32
, В консоли отладчика вы должны увидеть предупреждение SceneKit о неподдерживаемом индексе шириной 64 бита.