2017-08-04 12 views
1

ファイルから解析した独自のカスタムデータからMDLMeshを作成しようとしています。このファイルには、頂点の位置と三角形のインデックスのみが含まれています。私はそれらを2つのスウィフトDataオブジェクトに抽出します。頂点にはfloat3フォーマット、インデックスにはuint32フォーマットです。カスタムデータからのモデルI/Oメッシュ

私の問題は、自分のMDLMeshがSceneKit(結果のSCNGeometryが "空"と思われます)にインポートできず、そこから法線を作成できない(クラッシュする)ため、MDLMeshが正しく動作しないようです。今ここに

がMDLMeshのコードです:

let mesh = MDLMesh() 
     mesh.vertexBuffers = [MDLMeshBufferData(type: .vertex, data: vertexData)] 
     mesh.vertexCount = floats.count/3 
     let vertexDescriptor = MDLVertexDescriptor() 
     let attribute = MDLVertexAttribute(name: MDLVertexAttributePosition, format: .float3, offset: 0, bufferIndex: 0) 
     let layout = MDLVertexBufferLayout(stride: MemoryLayout<float3>.stride) 
     vertexDescriptor.attributes = [attribute] 
     vertexDescriptor.layouts = [layout] 

それから私は、サブメッシュ(つまり、三角形を記述)を作成:

let submesh = MDLSubmesh(indexBuffer: MDLMeshBufferData(type: MDLMeshBufferType.index, data: indexData), 
      indexCount: uint32Indexes.count-uint32Indexes.count/4, 
      indexType: .uint32, 
      geometryType: .triangles, 
      material: nil) 

mesh.submeshes = [submesh] 

をあなたは間違って何も見えていますか?それとも、自分のデータが正しくない可能性がありますか?ここで

mesh.addNormals(withAttributeNamed: MDLVertexAttributeNormal, creaseThreshold: 0) 

:法線をしようとした場合:indexCountvertexCountがより文脈:)

EDITせずに、両方の権利であっても、その定義は奇妙なようでタフであることに注意してください:
あなたは

NBありがとう

2017-08-04 09:39:24.078436 + 0200 MyAppName [506:706] 57]キャッチされない例外により 'NSRangeException'、理由に アプリを終了*: '* - [__ NSArrayM objectAtIndexedSubscript:]:範囲外のインデックス1 [0 .. 0]' このメソッドの状態に

答えて

0

Apple documentationを: "頂点位置データを含まないメッシュ上でこのメソッドを呼び出すと例外が発生します。"、私はそれがここでの問題であると確信しています。頂点データには要素がないようです。

+0

私はおそらく私の問題を解決した答えを追加する必要があります!問題は明らかに、説明を追加する前にデータを提供していたため、データを追加すると、説明のデフォルト値に置き換えられました。 –

関連する問題