swift - 如何使 SCNParticleSystem 中的粒子不透明?
问题描述
我创建了一个 SceneKit 场景文件 > 粒子系统,但我不知道如何使所有粒子不透明。默认粒子 alpha 设置似乎是随机的。我更改了图像和其他一些属性,并截取了屏幕截图:
我试过了:
particle.particleColorVariation = SCNVector4(0, 0, 0, 0)
这只会使粒子大约 80%-90% 透明,但我不能让它 100% 不透明。
解决方案
要使粒子系统完全不透明,您需要将blendMode实例属性设置为.alpha
(默认值为.additive
)并将排序模式实例属性设置为.distance
(默认值为.none
)
var blendMode: SCNParticleBlendMode { get set }
var sortingMode: SCNParticleSortingMode { get set }
根据苹果文档:
.blendMode
是将粒子图像合成到渲染场景中的混合模式。
SceneKit 中有六种粒子合成混合模式:
.additive
.alpha
.multiply
.replace
.screen
.subtract
这是它在实际代码中的样子:
let scnView = self.view as! SCNView
scnView.scene = scene
scnView.allowsCameraControl = true
scnView.backgroundColor = NSColor.black
let particleSystem = SCNParticleSystem()
particleSystem.birthRate = 5
particleSystem.blendMode = .alpha // 100% opaque if alpha = 1.0
particleSystem.sortingMode = .distance
particleSystem.particleSize = 1.0
particleSystem.emitterShape = SCNSphere(radius: 5)
particleSystem.particleLifeSpan = 100
particleSystem.particleColor = .red
// No Alpha variation
particleSystem.particleColorVariation = SCNVector4(1, 1, 1, 0)
let particlesNode = SCNNode()
particlesNode.addParticleSystem(particleSystem)
scnView.scene!.rootNode.addChildNode(particlesNode)
推荐阅读
- javascript - 如何定期检查客户端是否与 WebSocket http Server 断开连接
- nexus3 - nexus - 无法在其余 api 上查询 xz 扩展
- python - 为什么这个 pyppeteer 代码只能在 Windows 上运行?
- c# - 使用 UnityEngine.JsonUtility 反序列化 JSON 返回空列表
- python - 如何使用 flask-restplus 更改 api 的 request_loader
- javascript - 将报价放入innerText
- visual-studio-code - VSCode 的 Vim 的插入符号位置在一个单词之后而不是之前
- android - 在android中使用分页库时无法从数据源工厂获取数据
- php - 函数递归以获得不是星期天或星期六的一天
- java - jpa @OneToMany 地图
似乎不可能