Saya memiliki file biner yang berisi banyak nilai tiga kali lipat Float
; ini sebenarnya adalah array panjang SCNVector3
yang mewakili simpul untuk SCNGeometrySource
. Saya membaca file (maafkan kelalaian do-try-catch, dll) ke dalam memori:
let sceneVectors = Data(contentsOf: sceneURL)
dan ingin meneruskan data memori itu sebagai [SCNVector3]
ke SceneKit:
let sceneGeometry = SCNGeometrySource(vertices: sceneVectors)
Saya telah bergulat hari ini dengan menggunakan mekanisme UnsafePointer
untuk mengetik ulang konten buffer Data
sebagai array SCNVector3
untuk memenuhi kontrak SCNGeometrySource
; sesuatu seperti ini.
dataBuffer.withUnsafeBytes {
(vertexBuffer: UnsafePointer<SCNVector3>) -> SCNGeometry in
« magic happens here »
return sceneGeometry
}
Pembacaan saya tentang ini memberi tahu saya bahwa, dalam penutupan, buffer dapat diakses sebagai array SCNVector3
, tetapi ketika diteruskan ke SCNGeometrySource
hal ini menyebabkan Swift melaporkan:
cannot convert value of type 'UnsafePointer<SCNVector3>' to expected argument type '[SCNVector3]'
Seperti biasa, saya curiga ada solusi sederhana yang belum saya temukan, jadi saya sangat menghargai saran apa pun untuk menyelesaikannya.