LoginSignup
0
0

More than 3 years have passed since last update.

【Model I/O】MDLMeshオブジェクトから頂点データを取得する方法

Posted at

Model I/Oフレームワークの、MDLMeshオブジェクトから頂点の情報を取得するのが面倒だったので、メモ。

参考:
Read vertex positions with Model I/O
https://gist.github.com/algal/8e31ce035af0aafebc3736661ae9e3cd

mdlMeshにMDLMeshオブジェクトの値が入っているとして、これをXcodeのデバッガ(LLDB)上で取得したい場合。

頂点の数を取得する。

デバッガ
po mdlMesh.vertexCount
// 出力結果:54

バッファのデータのstrideを確認する。

デバッガ
po mdlMesh.vertexDescriptor.layouts.filter {($0 as! MDLVertexBufferLayout).stride != 0}
// 出力結果:
// ▿ 1 element
//   - 0 : <MDLVertexBufferLayout: 0x2824e4490 stride=32>

strideは32であることがわかった。

次のコードで、fromByteOffsetにオフセットを与えると頂点の情報が確認できる
n番目の要素を得たいときは、n * strideで取得できる。例えば2番目の要素を取得したいときは2*32を与える・

デバッガ
po mdlMesh.vertexBuffers.first!.map().bytes.load(fromByteOffset: 1*32, as: Float3.self)
// 出力結果:
// ▿ SIMD3<Float>(0.5, 0.5, 0.5)
//   ▿ _storage : SIMD4Storage
//     - _value : (Opaque Value)

2番目の頂点の座標は、x = 0.5, y = 0.5, z = 0.5であることがわかった。

最後に

NoteではiOS開発、とくにCoreML、ARKit、Metalなどについて定期的に発信しています。
https://note.com/tokyoyoshida

Twitterでも発信しています。
https://twitter.com/jugemjugemjugem

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0