В университете я получил задание добавить изображение в качестве текстуры в октаэдр SCNGeometry.Это мой первый проект в Swift.
Существует множество советов по UIKit с классом UIImage, но я использую AppKit для macos и класса NSImage.И ни один из вариантов, которые я нашел в Интернете, еще не работал для меня.Возможно, я неправильно понимаю что-то фундаментальное.Ну, во-первых, я перетащил изображение с именем "sims.jpg" в папку своего проекта и в папку art.scnassets.А также добавил их с помощью меню «Файл» → «Добавить файлы» в «art.scnassets» и общую папку.И ничего не сделал с Assets.xcassets.
Тогда вот как создается фигура:
func createOctahedron() {
let vertices: [SCNVector3] = [
SCNVector3(0, 1, 0),
SCNVector3(-0.5, 0, 0.5),
SCNVector3(0.5, 0, 0.5),
SCNVector3(0.5, 0, -0.5),
SCNVector3(-0.5, 0, -0.5),
SCNVector3(0, -1, 0)
]
let source = SCNGeometrySource(vertices: vertices)
let indices: [UInt16] = [
0, 1, 2,
2, 3, 0,
3, 4, 0,
4, 1, 0,
1, 5, 2,
2, 5, 3,
3, 5, 4,
4, 5, 1
]
let element = SCNGeometryElement(indices: indices, primitiveType: .triangles)
let geometry = SCNGeometry(sources: [source], elements: [element])
let node = SCNNode(geometry: geometry)
node.geometry?.firstMaterial?.diffuse.contents = NSColor.green // назначаем цвет октаэдру
let scnView = self.view as! SCNView
scnView.scene?.rootNode.addChildNode(node)
let rotateAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: .pi, z: 0, duration: 5))
node.runAction(rotateAction)
}
На всякий случай позвольте мне оставить полный код
Итак, я бы добавил изображение вот так
let imageMaterial = SCNMaterial()
let image = NSImage.Name("sims")
imageMaterial.diffuse.contents = image
geometry.materials = [imageMaterial, imageMaterial, imageMaterial, imageMaterial, imageMaterial, imageMaterial, imageMaterial, imageMaterial]
Или, может быть, так?
node.geometry?.firstMaterial?.diffuse.contents = NSImage.Name("sims")
Или мне как-то дополнительно сопоставить его?Помогите мне, пожалуйста, потому что я действительно не понимаю.Xcode выводит только вращающийся октаэдр без дополнительной текстуры, без ошибок либо