Я пытаюсь распечатать позиции вершин MDLMesh
. У меня есть следующий код на детской площадке:
import Cocoa
import ModelIO
let boxURL = Bundle.main.url(forResource: "box", withExtension: "obj")!
let asset = MDLAsset(url: boxURL)
let mesh = asset.object(at: 0) as! MDLMesh
let vbuf = mesh.vertexBuffers[0]
let vbufmap = vbuf.map()
let layout = mesh.vertexDescriptor.layouts.firstObject as! MDLVertexBufferLayout
let stride = layout.stride
assert(vbuf.length == mesh.vertexCount*stride)
for i in 0..<mesh.vertexCount {
let v = (vbufmap.bytes+i*stride).bindMemory(to: float3.self, capacity: 1).pointee
print(v)
}
Он правильно печатает первую вершину, а затем segfaults во второй. Я подозреваю, что я делаю что-то не так с bindMemory
.
Обновление:
Копирование вершин в Data
произведения:
let data = Data(bytes: vbufmap.bytes, count: vbuf.length)
for i in 0..<mesh.vertexCount {
var v = float3(0)
let buffer = UnsafeMutableBufferPointer(start: &v, count: 1)
let start = i*stride
data.copyBytes(to: buffer, from: start..<start+MemoryLayout<float3>.size)
print(v)
}
Но мне не нужно было копировать все данные вершины, чтобы получить доступ к вершине.