/* * 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; }
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(); }