Esempio n. 1
0
	void initParticle(Particle& out)
	{
		// Time particle is created relative to the global running
		// time of the particle system.
		out.initialTime = mTime;

		// Flare lives for 2-4 seconds.
		out.lifeTime   = GetRandomFloat(2.0f, 4.0f);

		// Initial size in pixels.
		out.initialSize  = GetRandomFloat(10.0f, 15.0f);

		// Give a very small initial velocity to give the flares
		// some randomness.
		GetRandomVec(out.initialVelocity);

		// Scalar value used in vertex shader as an amplitude factor.
		out.mass = GetRandomFloat(1.0f, 2.0f);

		// Start color at 50-100% intensity when born for variation.
		out.initialColor = GetRandomFloat(0.5f, 1.0f)*WHITE;

		// Generate random particle on the ring in polar coordinates:
		// random radius and random angle.
		float r = GetRandomFloat(10.0f, 14.0f);
		float t = GetRandomFloat(0, 2.0f*D3DX_PI);

		// Convert to Cartesian coordinates.
		out.initialPos.x = r*cosf(t);
		out.initialPos.y = r*sinf(t);

		// Random depth value in [-1, 1] (depth of the ring)
		out.initialPos.z = GetRandomFloat(-1.0f, 1.0f);
	}
Esempio n. 2
0
	vgl_vector_3d<double> GetOrthogonalVector(const vgl_vector_3d<double> &V)
	{
		//Gram Schmidt Orthogonalization
		vgl_vector_3d<double> RandVec = GetRandomVec();
	
		vgl_vector_3d<double> N = RandVec - Project(RandVec, V);
		normalize(N);
		return N;
	}
Esempio n. 3
0
void FireBall::initParticle(ParticleEmitter::Particle& out)
{
	// Time particle is created relative to the global running
	// time of the particle system.
	out.initialTime = mTime;
    out.age=mTime;

	// Flare lives for 2-4 seconds.
	// original values //out.lifeTime   = GetRandomFloat(2.0f, 8.0f);
	out.lifeTime   = GetRandomFloat(mMinLifeTime, mMaxLifeTime);

	// Initial size in pixels.
	// original values //out.initialSize  = GetRandomFloat(10.0f, 15.0f);
	out.initialSize  = GetRandomFloat(mMinSize, mMaxSize);

	// Give a very small initial velocity to give the flares
	// some randomness.
	GetRandomVec(out.initialVelocity);
    out.initialVelocity.x *= mAccelImpulse.x;
    out.initialVelocity.y *= mAccelImpulse.y;
    out.initialVelocity.z *= mAccelImpulse.z;
    out.initialVelocity.x += mAccelShift.x;
    out.initialVelocity.y += mAccelShift.y;
    out.initialVelocity.z += mAccelShift.z;

	// Scalar value used in vertex shader as an amplitude factor.
	out.mass = GetRandomFloat(1.0f, 2.0f);

	// Start color at 50-100% intensity when born for variation.
	out.initialColor = static_cast<DWORD>(GetRandomFloat(0.5f, 1.0f) *    1.0f);//white;

	V3 temp = mParticleRadius - mInitPos;
    float length = temp.Length();
    V3 tempNormal = temp.Normalize();
	
	//D3DXMATRIX outmtx;
	noMat3 outmtx;
	//D3DXMatrixRotationYawPitchRoll(&outmtx,GetRandomFloat(0.0f,2.0f)*noMath::PI,GetRandomFloat(0.0f,2.0f)*noMath::PI,0.0f);
	noAngles angle(RAD2DEG(GetRandomFloat(0.0f,2.0f)*noMath::PI), RAD2DEG(GetRandomFloat(0.0f,2.0f)*noMath::PI), 0.0f);
	outmtx = angle.ToMat3();
	
	//D3DXVec3TransformCoord(&temp,&temp,&outmtx);	
	temp = outmtx * temp;	
	out.initialPos = mInitPos + (temp * length);
}