Я пытаюсь сделать свою геометрию плоской, а не гладкой в SceneKit. Как вы можете видеть на изображениях, зеленая сфера имеет плавное затенение по умолчанию в SceneKit. То, что я хочу, это плоский «вид» на другом изображении, где написано «плоский».
Я не вижу в SceneKit никаких вариантов, как отключить эту функцию? Это код с моей игровой площадки:
import Cocoa
import SceneKit
import QuartzCore
import XCPlayground
var sceneView = SCNView(frame:CGRect(x:0, y:0, width:300, height:300))
var scene = SCNScene()
sceneView.backgroundColor = NSColor.darkGrayColor()
sceneView.scene = scene
sceneView.autoenablesDefaultLighting = true
XCPlaygroundPage.currentPage.liveView = sceneView
let g = SCNSphere(radius:1)
g.firstMaterial?.diffuse.contents = NSColor.greenColor()
g.firstMaterial?.litPerPixel = false
g.segmentCount = 5
let node = SCNNode(geometry:g)
node.position = SCNVector3(x:0, y:0, z:0)
scene.rootNode.addChildNode(node)
var spin = CABasicAnimation(keyPath:"rotation")
spin.toValue = NSValue(SCNVector4:SCNVector4(x:1, y:1, z:0, w:CGFloat(2.0*M_PI)))
spin.duration = 3
spin.repeatCount = HUGE
node.addAnimation(spin, forKey:"spin")
SCNMaterial.lightingModelName
, 3 варианта интерполируются, а 1 использует только окружающий свет. Я не думаю, что вы сможете получить квадратные грани из SCNSphere, которая использует триангулированную прямоугольную сетку (или геодезическую), поэтому вы также можете заняться SCNGeometrySource или бизнесом ввода-вывода модели. . Если вы пойдете по этому пути, вы можете продублировать вершины и указать нормали для каждой грани, а не для каждой вершины. Я надеюсь, что есть более простой способ, который я пропускаю. - person Hal Mueller   schedule 12.01.2016