Модельный ящик ввода-вывода из пользовательских данных - ios


1

Я пытаюсь создать MDLMesh из своих собственных данных, которые я проанализировал из файла. Файл содержит только положения вершин и индексы треугольников; Я извлекаю их в два объекта Swift Data, float3 для вершин и формат uint32 для индексов.

Моя проблема заключается в том, что мой MDLMesh не работает должным образом, так как я не могу импортировать его в SceneKit (результирующая SCNGeometry кажется "пустой") и не создает нормалей из нее (сбои).

Теперь вот код для 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]  

Затем я создаю sub mesh (который описывает треугольники):

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]

Вы видите что-то не так? Или может быть только то, что мои данные неверны?
Спасибо

NB: Обратите внимание, что indexCount и vertexCount оба правильны даже жестко, их определение кажется странным без дополнительного контекста :)

EDIT: При попытке сделать нормали:

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

Вот ошибка, которую я получаю:

2017-08-04 09: 39: 24.078436 + 0200 MyAppName [506: 70657] * Завершение приложения из-за неперехваченного исключения "NSRangeException", причина: * - [__ NSArrayM objectAtIndexedSubscript:]: индекс 1 за пределами границ [0.. 0]

Источник
  •  29
  •  1
  • 9 мар 2020 2020-03-09 01:49:36

1 ответ

0

Документация Apple по этому методу гласит: "Вызов этого метода в сетке, которая не содержит данные позиции вершин, вызывает исключение". И я считаю, что это именно то, что вы можете сказать здесь: ваши вершинные данные, похоже, не содержат элементов.

  • 9 мар 2020 2020-03-09 01:49:37