Как я могу изменить толщину линии прорисовки? - PullRequest
0 голосов
/ 03 мая 2018
private func lineFrom(vector vector1: SCNVector3, toVector vector2: SCNVector3) -> SCNGeometry {

        let indices: [Int32] = [0,1]
        let source = SCNGeometrySource(vertices: [vector1, vector2])
        let element = SCNGeometryElement(indices: indices, primitiveType: .line)
        return SCNGeometry(sources: [source], elements: [element])
    }


@objc private func tapped(rec: UITapGestureRecognizer) {

    let hitTransform = SCNMatrix4(hit.worldTransform)

                let hitPoint = SCNVector3Make(hitTransform.m41 , hitTransform.m42, hitTransform.m43)

                if points.start == nil{
                    print("start touch")
                    points.start = hitPoint
                    print(points.start!.x, points.start!.y, points.start!.z)

                } 

        else{
                    points.end = hitPoint
                    print(points.end!.x, points.end!.y, points.end!.z

                    line.geometry = lineFrom(vector: points.start!, toVector: points.end!)

                    line.geometry?.firstMaterial?.diffuse.contents = UIColor.red
                    line.geometry?.firstMaterial?.isDoubleSided = true

                    sceneView.scene.rootNode.addChildNode(line)
                    func renderer(_ renderer: SCNSceneRenderer, willRenderScene scene: SCNScene, atTime time: TimeInterval) {
                        glLineWidth(80)
                     }
                    canPlacePoint = false
                }
            }
        }
}

Я касаюсь двух точек, чтобы сохранить положение, и пытаюсь нарисовать линию, соединяющую две точки. Хотя линия нарисована, положение точки прикосновения не является правильным. Я также использовал glLineWidth (), потому что я хотел изменить толщину нарисованной линии, но она не изменилась. Что мне делать?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Две идеи стоит попробовать:

  • Прямая линия может быть нарисована с помощью повернутой SCNCapsule или SCNBox
  • заполните материал.diffuse.contents файлом изображения, используя прозрачные изображения, вы можете нарисовать много интересных форм
0 голосов
/ 28 июня 2018

SCeneKit предпочитает использовать Metal, а не OpenGl, а в Metal нет возможности рисовать толстые линии; Кроме того, OpenGl теперь устарела. Вы должны использовать треугольники, чтобы нарисовать жирные линии.

...