swift 设置漫反射内容在SceneKit中无效

yzuktlbb  于 2023-04-10  发布在  Swift
关注(0)|答案(1)|浏览(99)

当我尝试给予几何体一个漫反射内容为红色的材质时,我得到的是一个白色的对象。
下面是我用来创建节点的代码:

let geo = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0.1)
let mat = SCNMaterial()
mat.diffuse.contents = Color.red
mat.diffuse.intensity = 1
geo.materials = [mat]
                
let node = SCNNode(geometry: geo)
SomeClass.scene!.rootNode.addChildNode(node)

下面是我用来创建 SceneView 的代码

SceneView(scene: SomeClass.scene, 
             pointOfView: nil, 
                 options: [.allowsCameraControl, .autoenablesDefaultLighting], 
preferredFramesPerSecond: 60, 
        antialiasingMode: .multisampling2X, 
                delegate: sceneDelegate, 
               technique: nil)

SomeClass只是一个保存场景属性的基本类。我创建这个类的原因我不知道。
我试着将diffuse.contents设置为CGColor而不是“正常”颜色,并在互联网上做了一些研究,但找不到有类似问题的人。

lyfkaqu1

lyfkaqu11#

根据Apple documentation,您应该使用UIColorNSColor示例:

material.diffuse.contents = UIColor.red

...或CGColor示例:

material.diffuse.contents = UIColor.red.cgColor

代码如下:

import SwiftUI
import SceneKit

struct ContentView: View {
    
    @State private var scene = SCNScene()
    let options: SceneView.Options = [.allowsCameraControl, 
                                      .autoenablesDefaultLighting]
    
    var body: some View {
        SceneView(scene: scene, options: [options]).ignoresSafeArea()
        self.loadModel()
    }
    
    func loadModel() -> EmptyView {
        scene.background.contents = UIColor.black
        
        let geometry = SCNBox(width: 1, height: 1, length: 1, 
                                                   chamferRadius: 0.1)
        let material = SCNMaterial()
        material.diffuse.contents = UIColor.red
        geometry.materials = [material]
                        
        let node = SCNNode(geometry: geometry)
        scene.rootNode.addChildNode(node)
        
        return EmptyView()
    }
}

相关问题