Benutzerdefinierte SceneKit-Geometrie in Swift unter iOS funktioniert nicht, aber der entsprechende Objective C-Code funktioniert

Ich bin sehr daran interessiert, die neue Swift-Sprache zu übernehmen, da dies der Weg für die Apple-Entwicklung zu sein scheint. Ich war auch von der neuen SceneKit-Unterstützung in iOS 8 beeindruckt. Ich möchte zur Laufzeit programmgesteuert benutzerdefinierte Geometrie erstellen, habe jedoch Schwierigkeiten, den Swift-Code zum Laufen zu bringen. Der entsprechende Code in Ziel C funktioniert jedoch einwandfrei.

Dies könnte ein Fehler sein oder etwas, was ich falsch mache.

Ich versuche einfach, ein einzelnes Dreieck zu erstellen und zu rendern. Ich werde an dieser Stelle der Einfachheit halber die Normalen und Texturen usw. ignorieren. Ich erwarte also nur ein schwarzes Dreieck.

Swift Code (funktioniert nicht)

var verts = [SCNVector3(x: 0,y: 0,z: 0),SCNVector3(x: 1,y: 0,z: 0),SCNVector3(x: 0,y: 1,z: 0)]

let src = SCNGeometrySource(vertices: &verts, count: 3)
let indexes:Int[]=[0,1,2]
let dat  = NSData(bytes: indexes, length: sizeofValue(indexes))
let ele = SCNGeometryElement(data:dat, primitiveType: .Triangles, primitiveCount: 1, bytesPerIndex: sizeof(Int))
let geo = SCNGeometry(sources: [src], elements: [ele])

let nd = SCNNode(geometry: geo)
scene.rootNode.addChildNode(nd)

Objective C Code (der funktioniert)

SCNVector3 verts[] = { SCNVector3Make(0, 0, 0), SCNVector3Make(1, 0, 0), SCNVector3Make(0, 1, 0) };
SCNGeometrySource *src = [SCNGeometrySource geometrySourceWithVertices:verts count:3];

int indexes[] = { 0, 1, 2 };
NSData *datIndexes = [NSData dataWithBytes:indexes length:sizeof(indexes)];
SCNGeometryElement *ele = [SCNGeometryElement geometryElementWithData:datIndexes primitiveType:SCNGeometryPrimitiveTypeTriangles primitiveCount:1 bytesPerIndex:sizeof(int)];
SCNGeometry *geo = [SCNGeometry geometryWithSources:@[src] elements:@[ele]];

SCNNode *nd = [SCNNode nodeWithGeometry:geo];
d
[scene.rootNode addChildNode:nd];

Alle Hinweise wäre dankbar.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage