Создание собственного многоугольника SCNGeometry - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь создать собственный класс SCNPlane , который может иметь форму любого многоугольника, поскольку обычный SCNPlane может быть только прямоугольником.

Я попытался сделать это, расширив SCNGeometry .Ниже приведен код, который я использую:

extension SCNGeometry {
    static func polygonPlane(vertices: [SCNVector3]) -> SCNGeometry {
        let src = SCNGeometrySource(vertices: vertices)

        var indices: [UInt32] = []        
        var index: UInt32 = 0
        for _ in vertices {
            indices.append(index)
            index += 1
        }

        let inds = SCNGeometryElement(indices: indices, primitiveType: .polygon)

        return SCNGeometry(sources: [src], elements: [inds])
    }
}

Как вы можете видеть, метод принимает в качестве входных данных массив вершин, и я хочу соединить их, чтобы создать плоскость с заданной геометрией, используя вершиныпредоставлена.

При использовании SCNGeometryPrimitiveType.polygon , как и в приведенном выше коде, я получаю странную ошибку: «Поток 1: EXC_BREAKPOINT (код = 1, субкод = 0x106362e20)».Кажется, что функциональность для этого случая не реализована в Swift, но что это для Objective-C?Можно ли как-нибудь использовать это?

Я также пытался использовать другие параметры для primitiveType-value, и при использовании этих значений не происходит сбоев, что еще больше укрепляет мою уверенность в том, что что-то не так с.polygon case.

1 Ответ

1 голос
/ 24 марта 2019

При использовании полигона, вы должны использовать

  init(data: Data?, primitiveType: SCNGeometryPrimitiveType, primitiveCount: Int, bytesPerIndex: Int)

, чтобы инициировать элемент SCNGeometryElement.Смотрите Apple Doc для деталей.

...