Open main menu

CDOT Wiki β

Changes

DPS905 Kaitlyn ParticleEffects

3,908 bytes added, 21:41, 13 April 2011
[A] - INSTALLATION
**************************************************************************************************
[[Image:Kaitlyn_particles_April2011_v01.jpg]]
 Contents:* [[#installation|[A] INSTALLATION]]* [[#using|[B] HOW TO USE]]  <div id="installation"></div> = =[A] - INSTALLATION ==
* [http://matrix.senecac.on.ca/~dacallow/DPS905/ParticleVertexList.cpp ParticleVertexList.cpp]
* [http://matrix.senecac.on.ca/~dacallow/DPS905/ParticleVertexList.h ParticleVertexList.h]
* Optionally, you can get a simple texture for you to try making particle effects with here: [http://matrix.senecac.on.ca/~dacallow/DPS905/bubble.tga bubble.tga]
* [http://matrix.senecac.on.ca/~dacallow/DPS905/effects.fx Effects.fx]
 
5) Modify Display.cpp
* Inside Add an include at the top..  #include "ParticleVertexList.h" // for access to ParticleVertexList::connectDevice()  * Then add inside of the method: bool Display::setup(void* hwnd)
near line 360 (beneath the comment "// setup successful") add...
'''scene->draw(PARTICLES);'''
hud->draw(HUD_ALPHA);
 
 
 
10) Modify iVertexList.h
 
* Add to Class iVertexList
 
virtual void clear() = 0;
 
* Add to the bottom of the file iVertexList.h
 
extern "C"
iVertexList* CreateParticleVertexList(PrimitiveType t, int np, bool flip = false);
 
 
 
11) Modify VertexList.h
 
* Add to Class VertexList
 
void clear() {nVertices = 0;} /* added for particle effects */
 
* At the bottom of VertexList.h add to the Class StockMesh
 
void clear() {}
 
 
 
<div id="using"></div>
 
== [B] - HOW TO USE ==
 
To create a particle:
 
1) Include in ParticleGenerator.h
 
2) Use the following suggested code (maybe in Design.cpp inside Design::initialize(int now)):
 
//VARIABLES
float generatorlifespan = 0.0f; // how long for the generator to run for (0.0f is forever) in seconds
float particlelifespan = 3.0f; // how long particles live for
float particlespawnrate = 180.0f; // how many particles can spawn, per second, up to the MAX_PARTICLES limit
float spawndispersion = 6.0f; // how varied are the spawn positions (0.0f means spawn on the same exact positon initially)
float theta = 80.0f; // how varied is the initial velocities, 180.0f is a full sphere, 90.0f is a hemisphere, 40.0f is a cone, etc
float startingspeed = 110.0f; // initial speed applied to the velocities
Colour startcolour = Colour(2.0f,0.0f,0.0f);
Colour endcolour = Colour(0.0f,0.0f,1.0f);
float frequencycolour = 0.0f;
float startsize = 5.0f;
float endsize = 0.0f;
float frequencysize = 0.0f;
Vector startgravity = Vector(0.0f, -29.8f, 0.0f);
Vector endgravity = Vector(0.0f, -199.8f, 0.0f);
float frequencygravityvertical = 0.0f;
float frequencygravityhorizontal = 0.0f;
float startalpha = 1.0f;
float endalpha = 0.0f;
float frequencyalpha = 0.0f;
Colour c = Colour(1.0f,0.0f,0.0f); //for object (material type)... not actually used
float p = 0.5f; //for object (reflectivity)... not actually used
iObject* particleEffect1 = CreateParticleGenerator(generatorlifespan, particlelifespan, particlespawnrate, spawndispersion, theta,
startingspeed, startcolour, endcolour, frequencycolour, startsize, endsize, frequencysize, startgravity, endgravity, frequencygravityvertical,
frequencygravityhorizontal, startalpha, endalpha, frequencyalpha, &c, &p);
//Add your desired texture on
iTexture* particle_texture = CreateTexture(L"bubble.tga");
particleEffect1->attach(particle_texture,0);
//Position your particle generator
particleEffect1->translate(250,70,250);
//Optionally particles may be set to attract to other objects or positions in the world
//((ParticleGenerator*)particleEffect1)->AttractTo(someObject,250.0f);
//((ParticleGenerator*)particleEffect1)->AttractTo(&Vector(50,50,50),250.0f);
 
 
3) Add inside Design.cpp in the Design::Update(int now) method your particle generator's update method.
 
particleEffect1->update(now);
 
 
'''PLEASE NOTE:''' The following is not working / implemented at this time: frequency, alpha transparency
7
edits