Отображение белого графического материала в ARKit с помощью Swift - PullRequest
1 голос
/ 24 июня 2019

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

func getsquareDrawnLineFrom(pos1: SCNVector3,
                            pos2: SCNVector3,
                            pos3: SCNVector3) -> SCNNode {

    let square = SquareplanlineFrom(vector1: pos1, vector2: pos2, vector3: pos3)
    let material = SCNMaterial()
    // material.diffuse.contents = UIColor.red
    material.diffuse.contents = UIImage(named: "grid")
    square.materials = [material]
    let square1 = SCNNode(geometry: square)
    square1.name = "tringle"
    return square1
}

// get line geometry between three vectors
func SquareplanlineFrom(vector1: SCNVector3,
                        vector2: SCNVector3, 
                        vector3: SCNVector3) -> SCNGeometry {

    let indices: [Int32] = [0, 1, 2]
    let source = SCNGeometrySource(vertices: [vector1, vector2, vector3])
    let element = SCNGeometryElement(indices: indices, primitiveType: .triangles)

    return SCNGeometry(sources: [source], elements: [element])
}

1 Ответ

1 голос
/ 24 июня 2019

Для размещения текстуры на вашем пользовательской геометрии треугольника вам необходимо реализовать два более важных свойства типа:

SCNGeometrySource.Semantic.texcoord
SCNGeometrySource.Semantic.normal

, которые позволяют текстуре выяснить, что являетсяUV-координаты и нормальное направление Poly, поэтому текстура может занимать определенное пространство на поверхности poly.

Посмотрите на этот пост и этот пост наGitHub, чтобы получить представление о том, как его реализовать .

Хотя, когда вы используете обычные примитивы SceneKit (такие как SCNSphere, SCNBox, SCNPlane и т. Д.) Или импортированные 3D-модели (в файле DAE, OBJ или USDZ)форматы), вы не думаете о реализации этих свойств типов, потому что вышеупомянутая геометрия уже содержит их.

...