/* * 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(); }
void ArmGLWidget::drawArm(ArmWristAngles A) { // Rover! glColor3f (.5, .5, .5); glTranslatef (-35, 5, 15); drawBox(45, 15, 45); glTranslatef (35, -5, -15); glColor3f (1, 1, 1); // Testing matrix m = MatrixTranslate(0, 0, 0); float val = -(ArmController::BASE_OFFSET); m = MatrixRotateY(A.base.rotation) * m; m = MatrixTranslate(-ArmController::BASE_OFFSET, 0, 0) * m; m = MatrixRotateZ(A.base.shoulder) * m; m = MatrixTranslate(ArmController::SEG1_LEN, 0, 0) * m; m = MatrixTranslate(0, 0, -ArmController::OFFSET) * m; m = MatrixRotateZ(A.base.elbow - 180) * m; m = MatrixTranslate(ArmController::SEG2_LEN, 0, 0) * m; m = MatrixRotateZ(-A.wristElevation) * m; m = MatrixTranslate(ArmController::END_EFFECTOR_MID, 0, 0) * m; m = MatrixRotateY(A.wristRotation) * m; m = MatrixTranslate(ArmController::END_EFFECTOR_END, 0, 0) * m; glPushMatrix(); glMultMatrixf (*(m.array)); drawBox(1, 1, 1); glPopMatrix(); glColor3f (1, 0, 0); // Draw arm box drawBox(15, 5, 15); glRotatef(A.base.rotation, 0, 1, 0); glTranslatef(0, 3.5, 0); drawCylinderY(3, 2); glTranslatef(-ArmController::BASE_OFFSET, 2, 0); drawCylinderZ(2, 6); glColor3f (0, 1, 0); glRotatef (A.base.shoulder, 0, 0, 1);//g.RotateTransform(-A.thetaS, System..Drawing2D.MatrixOrder.Prepend); glTranslatef(ArmController::SEG1_LEN/2, 0, 0); drawCylinderX(2, ArmController::SEG1_LEN); glTranslatef(ArmController::SEG1_LEN/2, 0, -ArmController::OFFSET/2); drawCylinderZ(2, ArmController::OFFSET + 4); glTranslatef(0, 0, -ArmController::OFFSET/2); glColor3f (1, 1, 0); // Elbow to wrist elevation glRotatef (A.base.elbow - 180, 0, 0, 1);//g.RotateTransform(180 - A.thetaE, System.Drawing.Drawing2D.MatrixOrder.Prepend); glTranslatef (ArmController::SEG2_LEN/2, 0, 0); drawCylinderX(2, ArmController::SEG2_LEN); glTranslatef (ArmController::SEG2_LEN/2, 0, 0); drawCylinderZ(2, 4); glColor3f (0, 0, 1); // Wirst elevation to wrist rotate glRotatef(-A.wristElevation, 0, 0, 1);//g.RotateTransform(A.thetaW, System.Drawing.Drawing2D.MatrixOrder.Prepend); glTranslatef(ArmController::END_EFFECTOR_MID/2, 0, 0); drawCylinderX(2, ArmController::END_EFFECTOR_MID); glTranslatef(ArmController::END_EFFECTOR_MID/2, 0, 0); drawCylinderY(2, 4); glColor3f (1, 0, 1); float GRIPPER_ARM_LEN = 8; float HALF = ArmController::END_EFFECTOR_END - GRIPPER_ARM_LEN; // Point of rotation servo glRotatef(A.writsTip, 0, 1, 0); glTranslatef(HALF/2, 0, 0); drawCylinderX(2, HALF); glTranslatef(HALF/2, 0, 0); glColor3f (0, 1, 1); static float r = 0; r += 7; glRotatef (A.wristRotation, 1, 0, 0); // CLAMPY CLAMPY! static float a = 0; a = sind(r) * 15; drawCylinderX(4, 1); glPushMatrix(); glTranslatef(0, 0, -4); drawCylinderY(1, 2); glRotatef(a, 0, 1, 0); glTranslatef (GRIPPER_ARM_LEN/2, 0, 0); drawCylinderX(1, GRIPPER_ARM_LEN); glTranslatef (GRIPPER_ARM_LEN/2, 0, 0); glRotatef(-a - 90, 0, 1, 0); drawCylinderY(1, 2); glTranslatef(1, 0, 0); drawCylinderX(1, 2); glPopMatrix(); glPushMatrix(); glTranslatef(0, 0, 4); drawCylinderY(1, 2); glRotatef(-a, 0, 1, 0); glTranslatef (GRIPPER_ARM_LEN/2, 0, 0); drawCylinderX(1, GRIPPER_ARM_LEN); glTranslatef (GRIPPER_ARM_LEN/2, 0, 0); glRotatef(a + 90, 0, 1, 0); drawCylinderY(1, 2); glTranslatef(1, 0, 0); drawCylinderX(1, 2); glPopMatrix(); }