osgParticle.FireEffect是一个实现火焰效果的节点类型。它基于osgParticle.ParticleSystem实现,但具有更高级的控制能力。使用osgParticle.FireEffect,可以指定火焰的形状、大小、颜色、渐变、闪烁、发光强度等参数,以实现更加逼真的火焰效果。
使用osgParticle.FireEffect,首先需要创建一个空的osgParticle.ParticleSystem节点,然后将其传入osgParticle.FireEffect的构造函数中。例如,以下代码实现了一个简单的火焰效果:
import osg
import osgDB
import osgParticle
# 创建一个空的ParticleSystem节点
particles = osgParticle.ParticleSystem()
# 创建一个FireEffect节点,并将ParticleSystem节点作为参数传入
fire = osgParticle.FireEffect(particles)
# 设置火焰的位置、大小、颜色等属性
fire.setBound(osg.BoundingSphere(osg.Vec3(0, 0, 0), 1))
fire.setBaseColor(osg.Vec4(1, 1, 0, 1))
fire.setTopColor(osg.Vec4(1, 0, 0, 0))
# 将FireEffect节点添加到场景图中
root = osg.Group()
root.addChild(fire)
# 创建一个Viewer并运行
viewer = osgViewer.Viewer()
viewer.setSceneData(root)
viewer.run()
运行结果如下图所示:
在上面的代码中,创建了一个空的osgParticle.ParticleSystem节点,然后将其传入osgParticle.FireEffect的构造函数中,并设置了一些火焰的属性,例如颜色、大小、渐变等。最后,将FireEffect节点添加到了场景图中。
需要注意的是,上面的代码中只是创建了一个简单的火焰效果,如果要实现更加真实的火焰效果,还需要设置更多的参数。下面将具体介绍osgParticle.FireEffect的各个属性。
setBound(bound: osg.BoundingSphere)
设置火焰的边界,参数bound是一个osg.BoundingSphere类型的实例,代表火焰的包含球体。例如:
bound = osg.BoundingSphere(osg.Vec3(0, 0, 0), 1)
fire.setBound(bound)
表示火焰的包含球体的中心在原点,半径为1。
setIntensity(intensity: float)
设置灯光的强度,参数intensity是一个浮点数,范围为0到1。例如:
fire.setIntensity(0.5)
表示灯光强度为50%。
setParticleSize(size: float)
设置粒子的大小,参数size是一个浮点数,表示粒子的大小,单位为米。例如:
fire.setParticleSize(0.1)
表示粒子的大小为0.1米。
setMinimumParticleSpeed(speed: float)
设置粒子的最小速度,参数speed是一个浮点数,表示粒子的最小速度,单位为米/秒。例如:
fire.setMinimumParticleSpeed(0.5)
表示粒子的最小速度为0.5米/秒。
setMaximumParticleSpeed(speed: float)
设置粒子的最大速度,参数speed是一个浮点数,表示粒子的最大速度,单位为米/秒。例如:
fire.setMaximumParticleSpeed(2.0)
表示粒子的最大速度为2米/秒。
setParticleAlignment(alignment: osgParticle.ParticleEffect.ParticleAlignment)
设置粒子的对齐方式,参数alignment是一个osgParticle.ParticleEffect.ParticleAlignment枚举类型的实例,代表粒子的对齐方式。例如:
fire.setParticleAlignment(osgParticle.ParticleEffect.Z_AXIS)
表示粒子沿着Z轴对齐。
setBaseColor(color: osg.Vec4)
设置火焰的基础颜色,参数color是一个osg.Vec4类型的实例,代表火焰的基础颜色。例如:
fire.setBaseColor(osg.Vec4(1, 1, 0, 1))
表示火焰的基础颜色为黄色。
setTopColor(color: osg.Vec4)
设置火焰的顶部颜色,参数color是一个osg.Vec4类型的实例,代表火焰的顶部颜色。例如:
fire.setTopColor(osg.Vec4(1, 0, 0, 0))
表示火焰的顶部颜色为红色。
setUseShaders(useShaders: bool)
设置是否使用着色器渲染,参数useShaders是一个布尔值,表示是否使用着色器进行渲染。例如:
fire.setUseShaders(True)
表示使用着色器进行渲染。
setSmoke(smoke: bool)
设置是否产生烟雾,参数smoke是一个布尔值,表示是否产生烟雾。例如:
fire.setSmoke(True)
表示火焰产生烟雾。
setSmokeColor(color: osg.Vec4)
设置烟雾的颜色,参数color是一个osg.Vec4类型的实例,代表烟雾的颜色。例如:
fire.setSmokeColor(osg.Vec4(0.5, 0.5, 0.5, 0.5))
表示烟雾的颜色为浅灰色。
setSmokeIntensity(intensity: float)
设置烟雾的强度,参数intensity是一个浮点数,表示烟雾的强度。例如:
fire.setSmokeIntensity(0.5)
表示烟雾的强度为50%。
setSmokeParticleSize(size: float)
设置烟雾粒子的大小,参数size是一个浮点数,表示烟雾粒子的大小,单位为米。例如:
fire.setSmokeParticleSize(0.2)
表示烟雾粒子的大小为0.2米。
setSmokeParticleDensity(density: float)
设置烟雾粒子的密度,参数density是一个浮点数,表示烟雾粒子的密度。例如:
fire.setSmokeParticleDensity(0.5)
表示烟雾粒子的密度为50%。
setSmokeParticleSpeed(speed: float)
设置烟雾粒子的速度,参数speed是一个浮点数,表示烟雾粒子的速度,单位为米/秒。例如:
fire.setSmokeParticleSpeed(0.5)
表示烟雾粒子的速度为0.5米/秒。
setSmokeParticleAlignment(alignment: osgParticle.ParticleEffect.ParticleAlignment)
设置烟雾粒子的对齐方式,参数alignment是一个osgParticle.ParticleEffect.ParticleAlignment枚举类型的实例,代表烟雾粒子的对齐方式。例如:
fire.setSmokeParticleAlignment(osgParticle.ParticleEffect.Z_AXIS)
表示烟雾粒子沿着Z轴对齐。
setSmokeBlending(blending: bool)
设置烟雾是否使用混合模式,参数blending是一个布尔值,表示烟雾是否使用混合模式。例如:
fire.setSmokeBlending(True)
表示烟雾使用混合模式。
setSmokeTexture(texture: osg.Texture)
设置烟雾使用的纹理,参数texture是一个osg.Texture类型的实例,代表烟雾使用的纹理。例如:
texture = osg.Texture2D()
texture.setImage(osgDB.readImageFile("smoke.png"))
fire.setSmokeTexture(texture)
表示使用名为smoke.png的图片作为烟雾的纹理。
setElevationRange(minElevation: float, maxElevation: float)
设置火焰的高度取值范围,参数minElevation和maxElevation是两个浮点数,表示火焰的最低高度和最高高度,单位为米。例如:
fire.setElevationRange(0, 1)
表示火焰的高度取值范围为0到1米。
setRadiusRange(minRadius: float, maxRadius: float)
设置火焰的半径取值范围,参数minRadius和maxRadius是两个浮点数,表示火焰的最小半径和最大半径,单位为米。例如:
fire.setRadiusRange(0.5, 1.5)
表示火焰的半径取值范围为0.5到1.5米。
setHeightRange(minHeight: float, maxHeight: float)
设置火焰的高度取值范围,参数minHeight和maxHeight是两个浮点数,表示火焰的最小高度和最大高度,单位为米。例如:
fire.setHeightRange(1, 2)
表示火焰的高度取值范围为1到2米。
setLifeTimeRange(minLifeTime: float, maxLifeTime: float)
设置火焰粒子的寿命取值范围,参数minLifeTime和maxLifeTime是两个浮点数,表示火焰粒子的最短寿命和最长寿命,单位为秒。例如:
fire.setLifeTimeRange(0.5, 1.5)
表示火焰粒子的寿命取值范围为0.5到1.5秒。
setWind(x: float, y: float, z: float)
设置风的方向和速度,参数x、y、z是三个浮点数,分别表示风的X、Y、Z轴分量的速度。例如:
fire.setWind(0, 0, 1)
表示火焰受到Z轴正方向1米/秒的风的影响。
setAnimationSpeedFactor(speedFactor: float)
设置动画速度因子,参数speedFactor是一个浮点数,代表动画的速度倍数。例如:
fire.setAnimationSpeedFactor(2)
表示动画的速度加倍。
setMinimumIntensity(minIntensity: float)
设置灯光的最小强度,参数minIntensity是一个浮点数,代表灯光的最小强度,范围为0到1。例如:
fire.setMinimumIntensity(0.2)
表示灯光的最小强度为20%。
setMaximumIntensity(maxIntensity: float)
设置灯光的最大强度,参数maxIntensity是一个浮点数,代表灯光的最大强度,范围为0到1。例如:
fire.setMaximumIntensity(0.8)
表示灯光的最大强度为80%。
setAttenuation(range: float, constant: float, linear: float, quadratic: float)
设置光照衰减参数,参数range、constant、linear、quadratic分别代表光照衰减的范围、常数、线性、二次系数。例如:
fire.setAttenuation(100, 1, 0.1, 0.01)
表示光照衰减的范围为100,常数为1,线性系数为0.1,二次系数为0.01。