Установить цвет пользовательской геометрии в SceneKit - PullRequest
0 голосов
/ 14 декабря 2018

Я успешно построил и отобразил пользовательскую геометрию (куб) в SceneKit из этого поста

Пользовательская геометрия

Теперь я хочу установить цветкаждого лица разного цвета.Я нашел этот пост, который должен делать это

на цвет вершины

К сожалению, я не могу установить цвет лица куба для определенногоцвет.Например, если я установлю цвет всех вершин на SCNVector3(x:1,y:0,z:0), я бы ожидал, что все грани будут красными, но вместо этого все они будут зелеными.Установка цветов на SCNVector3(x:0,y:1,z:0) делает лица черными.Вот соответствующий код

let colors = [SCNVector3](count:vertices.count, repeatedValue:SCNVector3(x:1, y:0, z:0))

let colorData = NSData(bytes: colors, length: sizeof(SCNVector3) * colors.count)
let colorSource = SCNGeometrySource(data: colorData, semantic: SCNGeometrySourceSemanticColor, vectorCount: colors.count, floatComponents: true, componentsPerVector: 3, bytesPerComponent: sizeof(Float), dataOffset: 0, dataStride: sizeof(SCNVector3))

let geometry = SCNGeometry(sources: [colorSource, vertexSource, normalSource], elements: [element])

// Create a node and assign our custom geometry
let node = SCNNode()

let material = SCNMaterial()
material.diffuse.contents = NSColor.whiteColor()
geometry.materials = [material]

node.geometry = geometry

Кто-нибудь знает, почему он не работает?

1 Ответ

0 голосов
/ 16 декабря 2018

Вы должны создать материал для лица с другим цветом.

Например:

let material1 = SCNMaterial()
material1.diffuse.contents = NSColor.whiteColor()
let material2 = SCNMaterial()
material2.diffuse.contents = NSColor.greenColor()
let material3 = SCNMaterial()
material3.diffuse.contents = NSColor.redColor()
let material4 = SCNMaterial()
material4.diffuse.contents = NSColor.blackColor()
let material5 = SCNMaterial()
material5.diffuse.contents = NSColor.blueColor()
let material6 = SCNMaterial()
material6.diffuse.contents = NSColor.whiteColor()

geometry.materials = [material1,material2,material3,material4,material5,material6]
...