SCNGeometry 自定义形状出现黑色
Posted
技术标签:
【中文标题】SCNGeometry 自定义形状出现黑色【英文标题】:SCNGeometry custom shape appear black 【发布时间】:2019-03-03 23:55:51 【问题描述】:我正在尝试在 SceneKit 中创建自定义几何形状,结果我的形状很好。唯一的问题是它是黑色的,即使我改变了颜色,它仍然是黑色的。我用 SceneKit 中的其他原始形状进行了测试,结果它们很正常。我以为我必须计算表面法线,但根据其他教程和在线代码示例,除非我希望我的形状以某种方式确定,否则我不必计算表面法线,框架会默认为我。我不知道为什么我的形状是黑色的,我在这里查看了不同的主题,但找不到适合我的答案。我对 SceneKit 和 Swift 很陌生。这是我的代码:
import UIKit
import SceneKit
import QuartzCore
class GameViewController: UIViewController
var scnView: SCNView!
var scnScene: SCNScene!
var cameraNode: SCNNode!
override func viewDidLoad()
super.viewDidLoad()
setupView()
setupScene()
setupCamera()
spawnShape()
func shouldAutorotate() -> Bool
return true
func prefersStatusBarHidden() -> Bool
return true
func setupView()
scnView = self.view as! SCNView
// 1
scnView.showsStatistics = true
// 2
scnView.allowsCameraControl = true
// 3
scnView.autoenablesDefaultLighting = true
func setupScene()
scnScene = SCNScene()
scnView.scene = scnScene
scnView.backgroundColor = UIColor.white
func setupCamera()
// 1
cameraNode = SCNNode()
// 2
cameraNode.camera = SCNCamera()
// 3
cameraNode.position = SCNVector3(x: 0, y: 0, z: 15)
// 4
scnScene.rootNode.addChildNode(cameraNode)
这是我创建自定义形状的地方。我已经用其他原始形状进行了测试,它们工作正常,但是由于某些我不知道的原因,我的自定义形状变成了黑色:
func spawnShape()
// 1
var geometry:SCNGeometry
let positions = [
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: positions)
let indices:[UInt32] = [
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)
// 4
geometry = SCNGeometry(sources: [source], elements: [element])
geometry.firstMaterial?.diffuse.contents = UIColor.white
let geometryNode = SCNNode(geometry: geometry)
// 5
scnScene.rootNode.addChildNode(geometryNode)
如果有人能帮助我理解,不胜感激。谢谢
【问题讨论】:
我玩过这个并且能够使用这个链接将颜色变为绿色。从那里我不确定它是如何工作的,但也许这会给你指明正确的方向:***.com/questions/32821653/scenekit-per-vertex-color 【参考方案1】:添加
geometry.firstMaterial?.lightingModel = .constant
改变了我。
【讨论】:
以上是关于SCNGeometry 自定义形状出现黑色的主要内容,如果未能解决你的问题,请参考以下文章