2015-02-07 2 views
2

Я использую следующий код, чтобы нарисовать линию между двумя узлами:Цветная линия в наборе сюжетов?

class func lineBetweenNodeA(nodeA: SCNNode, nodeB: SCNNode) -> SCNNode { 
    let positions: [Float32] = [nodeA.position.x, nodeA.position.y, nodeA.position.z, nodeB.position.x, nodeB.position.y, nodeB.position.z] 
    let positionData = NSData(bytes: positions, length: sizeof(Float32)*positions.count) 
    let indices: [Int32] = [0, 1] 
    let indexData = NSData(bytes: indices, length: sizeof(Int32) * indices.count) 
    let source = SCNGeometrySource(data: positionData, semantic: SCNGeometrySourceSemanticVertex, vectorCount: indices.count, floatComponents: true, componentsPerVector: 3, bytesPerComponent: sizeof(Float32), dataOffset: 0, dataStride: sizeof(Float32) * 3) 
    let element = SCNGeometryElement(data: indexData, primitiveType: SCNGeometryPrimitiveType.Line, primitiveCount: indices.count, bytesPerIndex: sizeof(Int32)) 
    let line = SCNGeometry(sources: [source], elements: [element]) 
    line.firstMaterial?.lightingModelName = SCNLightingModelConstant 
    line.firstMaterial?.emission.contents = UIColor.orangeColor() 
    return SCNNode(geometry: line) 
} 

Я хочу, чтобы иметь возможность передавать в цвете, когда я называю эту функцию так, что она меняет цвет, соответственно ...

Как указать цвет для рисованной линии?

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

+0

Вы уже указали цвет? Я вижу кое-что о «orangeColor» в коде, который вы опубликовали. – rickster

+0

Не похоже, что он работает. Линия всегда черная – zumzum

ответ

3

lightingModelName материала по умолчанию SCNLightingModelBlinn. С помощью этой модели освещения диффузного материала свойства используются следующим образом:

color = ... + diffuse * max(0, dot(N, L)) + ... 

, но так как ваша геометрия не нормали, diffuse всегда умножаются на 0.

Вы можете использовать модель SCNLightingModelConstant освещения или используйте emission материал вместо diffuse.

+0

Я попытался использовать свойство излучения вместо диффузного, но он все еще черный. – zumzum

+1

ОК, поэтому я думаю, что использование световых констант работает, хотя трудно увидеть цвет линии, потому что это действительно тонкий ... Я сделал это: line.firstMaterial? .lightingModelName = SCNLightingModelConstant – zumzum

Смежные вопросы