Difference between revisions of "DPS905 Kaitlyn ParticleEffects"
Line 63: | Line 63: | ||
− | 6) | + | 6) Modify Configuration.h |
+ | |||
+ | * Adding into the existing typedef enum Category (line 375) a new type of: | ||
+ | |||
+ | PARTICLES | ||
+ | |||
+ | |||
+ | |||
+ | 7) Modify Object.cpp | ||
+ | |||
+ | * Updating the Object::Object(category, colour, iGraphic*, int, int) method.. | ||
+ | |||
+ | Change from.. | ||
+ | // store reflectivity, shininess, and texture pointers | ||
+ | material = new Colour[nSubsets]; | ||
+ | shine = new float[nSubsets]; | ||
+ | texture = new iTexture**[nSubsets]; | ||
+ | for (int i = 0; i < nSubsets; i++) { | ||
+ | material[i] = c[i]; | ||
+ | if (p && p[i]) | ||
+ | shine[i] = p[i]; | ||
+ | else | ||
+ | shine[i] = DEFAULT_SHININESS; | ||
+ | if (material[i].a != 1.0f) | ||
+ | category = TRANSLUCENT_OBJECT; | ||
+ | texture[i] = new iTexture*[nStages]; | ||
+ | for (int j = 0; j < nStages; j++) | ||
+ | texture[i][j] = NULL; | ||
+ | } | ||
+ | |||
+ | And change it to..: | ||
+ | // store reflectivity, shininess, and texture pointers | ||
+ | material = new Colour[nSubsets]; | ||
+ | shine = new float[nSubsets]; | ||
+ | texture = new iTexture**[nSubsets]; | ||
+ | for (int i = 0; i < nSubsets; i++) { | ||
+ | material[i] = c[i]; | ||
+ | if (p && p[i]) | ||
+ | shine[i] = p[i]; | ||
+ | else | ||
+ | shine[i] = DEFAULT_SHININESS; | ||
+ | if (material[i].a != 1.0f '''&& category != PARTICLES''') | ||
+ | category = TRANSLUCENT_OBJECT; | ||
+ | texture[i] = new iTexture*[nStages]; | ||
+ | for (int j = 0; j < nStages; j++) | ||
+ | texture[i][j] = NULL; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | 8) Modify DeviceTexture.cpp | ||
+ | |||
+ | Inside the method ( void DeviceTexture::create(iScene* scene, const Matrix& view, const Matrix& projection, const Vector& viewpoint) ) | ||
+ | Near line 190... | ||
+ | |||
+ | Change from: | ||
+ | d3dd->BeginScene(); | ||
+ | scene->draw(SKYBOX); | ||
+ | scene->draw(OPAQUE_OBJECT); | ||
+ | scene->draw(TRANSLUCENT_OBJECT); | ||
+ | d3dd->EndScene(); | ||
+ | |||
+ | And change it to..: | ||
+ | d3dd->BeginScene(); | ||
+ | scene->draw(SKYBOX); | ||
+ | scene->draw(OPAQUE_OBJECT); | ||
+ | scene->draw(TRANSLUCENT_OBJECT); | ||
+ | '''scene->draw(PARTICLES);''' | ||
+ | d3dd->EndScene(); |
Revision as of 18:16, 11 April 2011
************************************************************************************************** ** Particles * ************************************************************************************************** * April 2011 * By Kaitlyn Callow ( KaitlynCallow.com | dacallow@learn.senecac.on.ca ) * For DPS905, Professor Chris Szalwinski **************************************************************************************************
INSTALLATION
1) Add the following files to your project:
- Particle.cpp
- Particle.h
- ParticleGenerator.cpp
- ParticleGenerator.h
- ParticleVertexList.cpp
- ParticleVertexList.h
2) Append onto the bottom of your existing Effects.fx file the contents of the following file:
3) Modify iObject.h:
- Add to Class iObject...
//added for particle effects / animations virtual void update(int now) = 0;
- At the bottom of the file iObject.h add...
extern "C" iObject* CreateParticleGenerator(float _generatorlifespan, float _particlelifespan, float _particlespawnrate, float _spawnpositiondispersion, float _theta, float _startingspeed, Colour _startcolour, Colour _endcolour, float _frequencycolour, float _startsize, float _endsize, float _frequencysize, Vector _startgravity, Vector _endgravity, float _frequencygravityvertical, float _frequencygravityhorizontal, float _startalpha, float _endalpha, float _frequencyalpha, Colour* c, float* p);
4) Modify Object.h
- Add to Class Object...
void update(int now) { /* do nothing, added for particle effects & animations */ }
5) Modify Display.cpp
- Inside of method: bool Display::setup(void* hwnd)
near line 360 (beneath the comment "// setup successful") add...
ParticleVertex::device = d3dd; ParticleVertexList::connectDevice(d3dd);
6) Modify Configuration.h
- Adding into the existing typedef enum Category (line 375) a new type of:
PARTICLES
7) Modify Object.cpp
- Updating the Object::Object(category, colour, iGraphic*, int, int) method..
Change from..
// store reflectivity, shininess, and texture pointers material = new Colour[nSubsets]; shine = new float[nSubsets]; texture = new iTexture**[nSubsets]; for (int i = 0; i < nSubsets; i++) { material[i] = c[i]; if (p && p[i]) shine[i] = p[i]; else shine[i] = DEFAULT_SHININESS; if (material[i].a != 1.0f) category = TRANSLUCENT_OBJECT; texture[i] = new iTexture*[nStages]; for (int j = 0; j < nStages; j++) texture[i][j] = NULL; }
And change it to..:
// store reflectivity, shininess, and texture pointers material = new Colour[nSubsets]; shine = new float[nSubsets]; texture = new iTexture**[nSubsets]; for (int i = 0; i < nSubsets; i++) { material[i] = c[i]; if (p && p[i]) shine[i] = p[i]; else shine[i] = DEFAULT_SHININESS; if (material[i].a != 1.0f && category != PARTICLES) category = TRANSLUCENT_OBJECT; texture[i] = new iTexture*[nStages]; for (int j = 0; j < nStages; j++) texture[i][j] = NULL; }
8) Modify DeviceTexture.cpp
Inside the method ( void DeviceTexture::create(iScene* scene, const Matrix& view, const Matrix& projection, const Vector& viewpoint) ) Near line 190...
Change from:
d3dd->BeginScene(); scene->draw(SKYBOX); scene->draw(OPAQUE_OBJECT); scene->draw(TRANSLUCENT_OBJECT); d3dd->EndScene();
And change it to..:
d3dd->BeginScene(); scene->draw(SKYBOX); scene->draw(OPAQUE_OBJECT); scene->draw(TRANSLUCENT_OBJECT); scene->draw(PARTICLES); d3dd->EndScene();