Exemple #1
0
/*
 * D3DParticleVelocityUpdate: Updates the velocity and position of a particle.
 */
void D3DParticleVelocityUpdate(emitter *pEmitter, particle *pParticle)
{
   D3DMATRIX rotate, matrix;
   custom_xyzw velocity;

   if (pEmitter->emitterFlags & PS_GRAVITY)
      pParticle->velocity.z -= 0.5f;
   velocity.x = pParticle->velocity.x;
   velocity.y = pParticle->velocity.y;
   velocity.z = pParticle->velocity.z;
   velocity.w = 1.0f;

   MatrixRotateX(&matrix, pParticle->rotation.x);
   MatrixRotateY(&rotate, pParticle->rotation.y);
   MatrixMultiply(&rotate, &matrix, &rotate);
   MatrixRotateZ(&matrix, pParticle->rotation.z);
   MatrixMultiply(&rotate, &rotate, &matrix);

   MatrixMultiplyVector(&velocity, &rotate, &velocity);

   pParticle->velocity.x = velocity.x;
   pParticle->velocity.y = velocity.y;
   pParticle->velocity.z = velocity.z;

   pParticle->oldPos.x = pParticle->pos.x;
   pParticle->oldPos.y = pParticle->pos.y;
   pParticle->oldPos.z = pParticle->pos.z;

   pParticle->pos.x += pParticle->velocity.x;
   pParticle->pos.y += pParticle->velocity.y;
   pParticle->pos.z += pParticle->velocity.z;
}
Exemple #2
0
void Animation::transformCamera(float dx, float dy)
{
    bool a = timer.isActive();
    if (a)
        timer.stop();

    weak_ptr<Camera> camera = animationScene->camera();
    if (camera.expired())
        return;

    shared_ptr<Camera> activeCamera = camera.lock();
    activeCamera->transform(MatrixRotateY(qDegreesToRadians(-dx/2)).create());
    activeCamera->transform(MatrixRotateX(qDegreesToRadians(dy/2)).create());
    animationScene->renderModels();

    if (a)
        timer.start();
}