opacity factor for particle system

beta.r3js.org
-=yb4f310 2017-11-13 15:22:08 +01:00
parent 3a2b045c2e
commit 840797d38b
4 changed files with 45 additions and 2 deletions

View File

@ -5,6 +5,8 @@
* @param lifeTime * @param lifeTime
* @param elapsed * @param elapsed
* @param mesh * @param mesh
* @param opacityType
* @param opacityFactor
* @param positionOffsetType * @param positionOffsetType
* @param positionOffset * @param positionOffset
* @param positionOffsetFn * @param positionOffsetFn
@ -28,6 +30,8 @@ GameLib.D3.API.Particle = function(
lifeTime, lifeTime,
elapsed, elapsed,
mesh, mesh,
opacityType,
opacityFactor,
positionOffsetType, positionOffsetType,
positionOffset, positionOffset,
positionOffsetFn, positionOffsetFn,
@ -70,6 +74,16 @@ GameLib.D3.API.Particle = function(
} }
this.mesh = mesh; this.mesh = mesh;
if (GameLib.Utils.UndefinedOrNull(opacityType)) {
opacityType = GameLib.D3.Particle.OPACITY_TYPE_CONSTANT;
}
this.opacityType = opacityType;
if (GameLib.Utils.UndefinedOrNull(opacityFactor)) {
opacityFactor = 0.01;
}
this.opacityFactor = opacityFactor;
if (GameLib.Utils.UndefinedOrNull(positionOffsetType)) { if (GameLib.Utils.UndefinedOrNull(positionOffsetType)) {
positionOffsetType = GameLib.D3.Particle.POSITION_OFFSET_TYPE_CONSTANT; positionOffsetType = GameLib.D3.Particle.POSITION_OFFSET_TYPE_CONSTANT;
} }
@ -171,6 +185,8 @@ GameLib.D3.API.Particle.FromObject = function(objectParticle) {
objectParticle.lifeTime, objectParticle.lifeTime,
objectParticle.elapsed, objectParticle.elapsed,
apiMesh, apiMesh,
objectParticle.opacityType,
objectParticle.opacityFactor,
objectParticle.positionOffsetType, objectParticle.positionOffsetType,
GameLib.API.Vector3.FromObject(objectParticle.positionOffset), GameLib.API.Vector3.FromObject(objectParticle.positionOffset),
objectParticle.positionOffsetFn, objectParticle.positionOffsetFn,

View File

@ -27,6 +27,8 @@ GameLib.D3.Particle = function(
apiParticle.lifeTime, apiParticle.lifeTime,
apiParticle.elapsed, apiParticle.elapsed,
apiParticle.mesh, apiParticle.mesh,
apiParticle.opacityType,
apiParticle.opacityFactor,
apiParticle.positionOffsetType, apiParticle.positionOffsetType,
apiParticle.positionOffset, apiParticle.positionOffset,
apiParticle.positionOffsetFn, apiParticle.positionOffsetFn,
@ -109,6 +111,10 @@ GameLib.D3.Particle = function(
GameLib.D3.Particle.prototype = Object.create(GameLib.D3.API.Particle.prototype); GameLib.D3.Particle.prototype = Object.create(GameLib.D3.API.Particle.prototype);
GameLib.D3.Particle.prototype.constructor = GameLib.D3.Particle; GameLib.D3.Particle.prototype.constructor = GameLib.D3.Particle;
GameLib.D3.Particle.OPACITY_TYPE_CONSTANT = 0x1;
GameLib.D3.Particle.OPACITY_TYPE_DECREASE_LINEAR = 0x2;
GameLib.D3.Particle.OPACITY_TYPE_INCREASE_LINEAR = 0x3;
GameLib.D3.Particle.POSITION_OFFSET_TYPE_CONSTANT = 0x1; GameLib.D3.Particle.POSITION_OFFSET_TYPE_CONSTANT = 0x1;
GameLib.D3.Particle.POSITION_OFFSET_TYPE_RANDOM = 0x2; GameLib.D3.Particle.POSITION_OFFSET_TYPE_RANDOM = 0x2;
GameLib.D3.Particle.POSITION_OFFSET_TYPE_FUNCTION = 0x3; GameLib.D3.Particle.POSITION_OFFSET_TYPE_FUNCTION = 0x3;
@ -186,6 +192,8 @@ GameLib.D3.Particle.prototype.toApiObject = function() {
this.lifeTime, this.lifeTime,
this.elapsed, this.elapsed,
GameLib.Utils.IdOrNull(this.mesh), GameLib.Utils.IdOrNull(this.mesh),
this.opacityType,
this.opacityFactor,
this.positionOffsetType, this.positionOffsetType,
this.positionOffset.toApiObject(), this.positionOffset.toApiObject(),
this.positionOffsetFn, this.positionOffsetFn,

View File

@ -714,7 +714,19 @@ GameLib.System.GUI.prototype.buildControl = function(folder, componentTemplate,
} }
) )
); );
} else if (property === 'positionOffsetType') { } else if (property === 'opacityType') {
controllers.push(
folder.add(
object,
property,
{
'constant': GameLib.D3.Particle.OPACITY_TYPE_CONSTANT,
'decrease': GameLib.D3.Particle.OPACITY_TYPE_DECREASE_LINEAR,
'increase': GameLib.D3.Particle.OPACITY_TYPE_INCREASE_LINEAR
}
)
);
} else if (property === 'positionOffsetType') {
controllers.push( controllers.push(
folder.add( folder.add(
object, object,
@ -1133,6 +1145,7 @@ GameLib.System.GUI.prototype.buildControl = function(folder, componentTemplate,
*/ */
if ( if (
property === 'opacity' || property === 'opacity' ||
property === 'opacityFactor' ||
property === 'metalness' || property === 'metalness' ||
property === 'roughness' property === 'roughness'
) { ) {

View File

@ -132,7 +132,13 @@ GameLib.System.Particle.prototype.beforeRender = function(data) {
particle.quaternion.copy(particleEngine.camera.instance.quaternion); particle.quaternion.copy(particleEngine.camera.instance.quaternion);
particle.material.opacity -= 0.033333; if (particleEngine.templateParticle.opacityType === GameLib.D3.Particle.OPACITY_TYPE_INCREASE_LINEAR) {
particle.material.opacity += particleEngine.templateParticle.opacityFactor;
}
if (particleEngine.templateParticle.opacityType === GameLib.D3.Particle.OPACITY_TYPE_DECREASE_LINEAR) {
particle.material.opacity -= particleEngine.templateParticle.opacityFactor;
}
particle.userData.elapsed += data.delta; particle.userData.elapsed += data.delta;
if ( if (