Наверное, не самое профессиональное решение, но я начал с очень похожего подхода.А затем добавили штриховой стиль следующим образом.
Сначала я создал изображение наполовину белое, наполовину прозрачное, чтобы создать штриховой стиль
Затем использовал его в материале SCNCylinder
:
material.diffuse.contents = UIImage(named: "line")!
material.diffuse.wrapS = .repeat
material.diffuse.wrapT = .repeat
material.isDoubleSided = true // Not sure if this is really needed here^
Затем я соответственно масштабировал его, чтобы повторить (сделать так, чтобы все было в порядке), как я хочу:
material.diffuse.contentsTransform = SCNMatrix4MakeScale(width * repeatCountPerMeter, height * repeatCountPerMeter, 1)
Поскольку я использовал белое изображение, я могу«подкрасьте» его любым цветом, который я хочу:
material.multiply.contents = UIColor.green
Чтобы сделать его более «2D-похожим», проигнорируйте освещение, используя:
material.lighting = .constant
Дополнительно (так как мой цилиндрповернуто на 90 °) Мне также пришлось повернуть материал:
let rotation = SCNMatrix4MakeRotation(.pi / 2, 0, 0, 1)
material.diffuse.contentsTransform = SCNMatrix4Mult(rotation, material.diffuse.contentsTransform)
И всякий раз, когда линия изменяется, обновляйте ее SCNMatrix4MakeScale
соответственно (см. width
и высоту above, where for
height`. Я простопоставить диаметр (2 * р)).