首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SCNGeometry自定义形状显示为黑色

SCNGeometry自定义形状显示为黑色
EN

Stack Overflow用户
提问于 2018-09-28 10:53:20
回答 1查看 294关注 0票数 1

我正在尝试在SceneKit中创建自定义几何形状,我的形状变得很好。唯一的问题是它是黑色的,即使我改变了颜色,它仍然是黑色的。我用SceneKit中的其他原始图形进行了测试,结果都是正常的。我认为我必须计算曲面法线,但根据其他教程和在线代码示例,除非我希望我的形状以某种方式进行,否则我不必计算曲面法线,框架将为我默认它。我不明白为什么我的形状是黑色的,我在这里看过不同的话题,我找不到一个适合我的答案。我是SceneKit和Swift的新手。下面是我的代码:

代码语言:javascript
复制
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)
    }

这里是我创建自定义形状的地方。我已经测试了其他原始形状,它们工作得很好,但我的自定义形状变黑了,原因我不知道:

代码语言:javascript
复制
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)
    }
}

如果有人能帮我理解,我将不胜感激。谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-11-01 04:31:01

添加

代码语言:javascript
复制
    geometry.firstMaterial?.lightingModel = .constant 

对我来说很不一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52547636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档