示例#1
0
void clExplosion::AttachToScene( const clPtr<clSceneNode>& Scene )
{
	if ( !m_Node )
	{
		m_Node = make_intrusive<clParticleSystemNode>();

		const vec4 Pal[] =
		{
			vec4( 0.2f, 0.30f, 0.8f, 1.0f ),
			vec4( 0.7f, 0.25f, 0.3f, 1.0f ),
			vec4( 0.1f, 0.80f, 0.2f, 1.0f )
		};

		vec4 Color = Pal[ Math::RandomInRange( 0, 3 ) ];

		auto Emitter = make_intrusive<clParticleEmitter_Explosion>();
		Emitter->FCenter = vec3( 0.0f );
		Emitter->FSizeMin = 0.02f;
		Emitter->FSizeMax = 0.05f;
		Emitter->FLifetimeMin = 0.1f;
		Emitter->FLifetimeMax = 1.0f;
		Emitter->FMaxParticles = 10000;
		Emitter->FEmissionRate = 300;
		Emitter->FRadialVelocityMin = 1.0f;
		Emitter->FRadialVelocityMax = 2.0f;
		Emitter->FColorMin = Color;
		Emitter->FColorMax = Color;
		Emitter->FAcceleration = 10.0f * m_ParticleAccel; //vec3( 0.0f, 0.0f, -3.0f );

		m_Node->AddEmitter( Emitter );
	}

	Scene->Add( m_Node );
}
示例#2
0
void clSpaceShip::AttachToScene( const clPtr<clSceneNode>& Scene )
{
	if ( !m_Node )
	{
		auto Geometry = LoadOBJSceneNode( g_FS->CreateReader( "ship.obj" ) );

		sMaterial Material;
		Material.m_Ambient = vec4( 0.0f, 0.0f, 0.4f, 1.0f );
		Material.m_Diffuse = vec4( 0.0f, 0.0f, 0.6f, 1.0f );

		m_Node = make_intrusive<clMaterialNode>();
		m_Node->SetMaterial( Material );
		m_Node->Add( Geometry );
	}

	Scene->Add( m_Node );
}
示例#3
0
void clRocket::AttachToScene( const clPtr<clSceneNode>& Scene )
{
	if ( !m_Node )
	{
		auto VA = clGeomServ::CreateAxisAlignedBox( vec3( -0.02f ), vec3( +0.02f ) );
		auto Geometry = make_intrusive<clGeometryNode>();
		Geometry->SetVertexAttribs( VA );

		sMaterial Material;
		Material.m_Ambient = vec4( 0.8f, 0.0f, 0.0f, 1.0f );
		Material.m_Diffuse = vec4( 0.2f, 0.0f, 0.0f, 1.0f );

		m_Node = make_intrusive<clMaterialNode>();
		m_Node->SetMaterial( Material );
		m_Node->Add( Geometry );
	}

	Scene->Add( m_Node );

	Update( 0.0f );
}