objective-c - SceneKit 避免在特定节点上照明

标签 objective-c macos scenekit light

在 SceneKit 中,我正在构建一个由线组成的节点,以在场景的中心绘制 XYZ 轴,就像在 Cinema4D 中一样。

cinema4D

我希望这 3 个节点不参与全局照明,即使光线很暗/不存在/太强也能看到。在下图中,您可以看到 Z 轴显得太亮而看不到。

my software

有没有办法阻止节点参与场景的照明,比如物理类别蒙版?

在这种情况下,如何使节点变亮才能使其出现?

最佳答案

SCNLight 有一个 categoryBitMask 属性。这使您可以选择受光影响的节点(尽管对于环境光而言这会被忽略)。您可以有 2 个光源类别,一个用于您的主要场景,另一个仅影响您的线条。

这是一个简单的例子,有 2 个节点,每个节点都点亮了不同颜色的光:

struct LightType {
    static let light1:Int = 0x1 << 1
    static let light2:Int = 0x1 << 2
}

class GameViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let scene = SCNScene(named: "art.scnassets/scene.scn")!

        let lightNode1 = SCNNode()
        lightNode1.light = SCNLight()
        lightNode1.light!.type = .omni
        lightNode1.light!.color = UIColor.yellow
        lightNode1.position = SCNVector3(x: 0, y: 10, z: 10)
        lightNode1.light!.categoryBitMask = LightType.light1
        scene.rootNode.addChildNode(lightNode1)

        let lightNode2 = SCNNode()
        lightNode2.light = SCNLight()
        lightNode2.light!.type = .omni
        lightNode2.light!.color = UIColor.red
        lightNode2.position = SCNVector3(x: 0, y: 10, z: 10)
        lightNode2.light!.categoryBitMask = LightType.light2
        scene.rootNode.addChildNode(lightNode2)

        let sphere1 = scene.rootNode.childNode(withName: "sphere1", recursively: true)!
        sphere1.categoryBitMask = LightType.light1
        let sphere2 = scene.rootNode.childNode(withName: "sphere2", recursively: true)!
        sphere2.categoryBitMask = LightType.light2

        let scnView = self.view as! SCNView
        scnView.scene = scene
    }
}

enter image description here

关于objective-c - SceneKit 避免在特定节点上照明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43094456/

相关文章:

SceneKit,固定灯光的位置

swift - 无法将 3D 模型作为 SCNGeometry 提供给 MDLMesh 容器

ios - 而 dispatch_sync(kBgQueue, ^{});在后台使用前台 UI 瞬间卡住

objective-c - 从 Obj-C 将 iOS 应用程序移植到 Mac/Mac Ruby?

json - 如何在 Mac 上通过命令行安装 JQ?

objective-c - 将 NSTitlebarAccessoryViewController 添加到 NSWindow 后出现延迟

iphone - 如何在 Objective C 中复制 UIButton?

ios - 自定义 UIView 上的披露指示器

ios - 将多分钟数字(超过 2)分钟转换为 NSDate

animation - 在 SceneKit 中动画化 UV