Рефераты. Автоматизированное редактирование частиц в компьютерной графике

#define TEXTURE_ATTR "texture_file_name"

#define LIFE_TIME_ATTR "life_time"

#define APPEAR_DELAY_ATTR "appear_delay"

#define PARTICLE_SPEED_X_ATTR "particle_speed_x"

#define PARTICLE_SPEED_Y_ATTR "particle_speed_y"

#define GRAVITY_X_ATTR "gravity_x"

#define GRAVITY_Y_ATTR "gravity_y"

#define MAX_COUNT_ATTR "max_count"

#define START_COUNT_ATTR "start_count"

#define APPEAR_BOX_W_ATTR "appear_box_w"

#define APPEAR_BOX_H_ATTR "appear_box_h"

#define RED_BEGIN_ATTR "red_begin"

#define RED_END_ATTR "red_end"

#define GREEN_BEGIN_ATTR "green_begin"

#define GREEN_END_ATTR "green_end"

#define BLUE_BEGIN_ATTR "blue_begin"

#define BLUE_END_ATTR "blue_end"

#define ALPHA_BEGIN_ATTR "alpha_begin"

#define ALPHA_END_ATTR "alpha_end"

#define SCALE_BEGIN_W_ATTR "scale_begin_w"

#define SCALE_BEGIN_H_ATTR "scale_begin_h"

#define SCALE_END_W_ATTR "scale_end_w"

#define SCALE_END_H_ATTR "scale_end_h"

#define DISPERSION_X_ATTR "dispersion_x"

#define DISPERSION_Y_ATTR "dispersion_y"

#define PS_X_ATTR "ps_x"

#define PS_Y_ATTR "ps_y"

#define PS_SPEED_X_ATTR "ps_speed_x"

#define PS_SPEED_Y_ATTR "ps_speed_y"

#define START_DELAY_ATTR "start_delay"

#define STOP_DELAY_ATTR "stop_delay"

#define ROTATE_ATTR "rotate"

//ctors, destructors, ...

ParticleSystem::ParticleSystem()

{

data.pLifeTime= 1.0;

data.pMaxCount = EXPL_MAX;

data.pCountOnStart = 1;

data.pGravityX = data.pGravityY = 0.0;

//p.speed, dispersion page

data.pMoveSpeedX = 0.0;

data.pMoveSpeedY = 0.0;

data.pKFDispersionX = 0.0;

data.pKFDispersionY = 0.0;

//p.scale page

data.pKFScaleBeginW = 1.0;

data.pKFScaleBeginH = 1.0;

data.pKFScaleEndW = 1.0;

data.pKFScaleEndH = 1.0;

//p.color page

data.pRedBegin = 1.0;

data.pGreenBegin = 1.0;

data.pBlueBegin = 1.0;

data.pAlphaBegin = 1.0;

data.pRedEnd = 1.0;

data.pGreenEnd = 1.0;

data.pBlueEnd = 1.0;

data.pAlphaEnd = 1.0;

//rotate

data.pAngleRotate = 0.0;

//start in, stop in page

data.startDelay = 0.0;

data.stopDelay = 1800.0;

data.pAppearDelay = 0.0;

//PS settings page

MYSize2D sz = {100.0,100.0};

data.pAppearBoxSize = sz;

data.speedChangeX = 0;

data.speedChangeY = 0;

data.initialX = currentX = BOUND_DIMENSION;

data.initialY = currentY = BOUND_DIMENSION;

boundedRectColor = PS_BOUNDED_RECT_COLOR;

particleTexPtr = NULL;

setDefaultParticleTex();

isRunb = false;

isFinishedb = false;

viewMatrixCache = (GLdouble*)malloc(sizeof(GLdouble) * 16);

assert(viewMatrixCache != NULL);

}

ParticleSystem::~ParticleSystem()

{

free(viewMatrixCache);

if(particleTexPtr)

delete particleTexPtr;

}

int ParticleSystem::setParticleTex(const wxString &texture_path)

{

MYTexture* tmp_tex = new MYTexture(texture_path);

int res = tmp_tex->getState();

if(res != TEX_OK)

{

delete tmp_tex;

return res;

}

if(particleTexPtr)

delete particleTexPtr;

particleTexPtr = tmp_tex;

data.particleTexFileName = texture_path;

MYTexCoordPoint *ptrTex = texCoord;

for(int i = 0; i < EXPL_MAX; i++)

{

ptrTex->x = 0.0; ptrTex->y = 0.0;

ptrTex++;

ptrTex->x = particleTexPtr->getMaxS(); ptrTex->y = 0.0;

ptrTex++;

ptrTex->x = particleTexPtr->getMaxS(); ptrTex->y = particleTexPtr->getMaxT();

ptrTex++;

ptrTex->x = 0.0; ptrTex->y = 0.0;

ptrTex++;

ptrTex->x = particleTexPtr->getMaxS(); ptrTex->y = particleTexPtr->getMaxT();

ptrTex++;

ptrTex->x = 0.0; ptrTex->y = particleTexPtr->getMaxT();

ptrTex++;

}

return TEX_OK;

}

void ParticleSystem::setDefaultParticleTex()

{

if(particleTexPtr)

delete particleTexPtr;

GLubyte *buffer = new GLubyte[8 * 8 * 4];

memset(buffer, 255, 8*8*4);//white colour

particleTexPtr = new MYTexture(32,16711680/*third byte pattern*/,65280/*second byte pattern*/,255/*first byte pattern*/

,8,8,buffer);

delete[] buffer;

data.particleTexFileName = wxString("");

}

double ParticleSystem::getX() const

{

return currentX;

}

double ParticleSystem::getY() const

{

return currentY;

}

void ParticleSystem::setX(double x)

{

data.initialX = currentX = x;

}

void ParticleSystem::setY(double y)

{

data.initialY = currentY = y;

}

double ParticleSystem::getSpeedChangeX() const

{

return data.speedChangeX;

}

double ParticleSystem::getSpeedChangeY() const

{

return data.speedChangeY;

}

void ParticleSystem::setSpeedChangeX(double speed)

{

data.speedChangeX = speed;

}

void ParticleSystem::setSpeedChangeY(double speed)

{

data.speedChangeY = speed;

}

double ParticleSystem::getStopDelay() const

{

return data.stopDelay;

}

double ParticleSystem::getStartDelay() const

{

return data.startDelay;

}

void ParticleSystem::setStopDelay(double time)

{

data.stopDelay = time;

}

void ParticleSystem::setStartDelay(double time)

{

data.startDelay = time;

}

double ParticleSystem::getLifeTime() const

{

return data.pLifeTime;

}

void ParticleSystem::setLifeTime(double time)

{

data.pLifeTime = time;

}

double ParticleSystem::getParticleAppearDelay() const

{

return data.pAppearDelay;

}

void ParticleSystem::setParticleAppearDelay(double time)

{

data.pAppearDelay = time;

}

double ParticleSystem::getMoveSpeedX() const

{

return data.pMoveSpeedX;

}

double ParticleSystem::getMoveSpeedY() const

{

return data.pMoveSpeedY;

}

void ParticleSystem::setMoveSpeedX(double speed)

{

data.pMoveSpeedX = speed;

}

void ParticleSystem::setMoveSpeedY(double speed)

{

data.pMoveSpeedY = speed;

}

double ParticleSystem::getGravityX() const

{

return data.pGravityX;

}

double ParticleSystem::getGravityY() const

{

return data.pGravityY;

}

void ParticleSystem::setGravityX(double gravity)

{

data.pGravityX = gravity;

}

void ParticleSystem::setGravityY(double gravity)

{

data.pGravityY = gravity;

}

int ParticleSystem::getMaxCount() const

{

return data.pMaxCount;

}

void ParticleSystem::setMaxCount(int count)

{

data.pMaxCount = count;

if(data.pCountOnStart > data.pMaxCount)

data.pCountOnStart = data.pMaxCount;

}

int ParticleSystem::getCountOnStart() const

{

return data.pCountOnStart;

}

void ParticleSystem::setCountOnStart(int count)

{

data.pCountOnStart = count;

}

MYSize2D ParticleSystem::getAppearBoxSize() const

{

return data.pAppearBoxSize;

}

void ParticleSystem::setAppearBoxSize(MYSize2D box)

{

data.pAppearBoxSize = box;

}

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.