void Compute_Rotation_Transform (TRANSFORM *transform, const VECTOR vector) { register DBL cosx, cosy, cosz, sinx, siny, sinz; MATRIX Matrix; VECTOR Radian_Vector; VScale (Radian_Vector, vector, M_PI_180); MIdentity (transform->matrix); cosx = cos (Radian_Vector[X]); sinx = sin (Radian_Vector[X]); cosy = cos (Radian_Vector[Y]); siny = sin (Radian_Vector[Y]); cosz = cos (Radian_Vector[Z]); sinz = sin (Radian_Vector[Z]); (transform->matrix) [1][1] = cosx; (transform->matrix) [2][2] = cosx; (transform->matrix) [1][2] = sinx; (transform->matrix) [2][1] = 0.0 - sinx; MTranspose (transform->inverse, transform->matrix); MIdentity (Matrix); Matrix [0][0] = cosy; Matrix [2][2] = cosy; Matrix [0][2] = 0.0 - siny; Matrix [2][0] = siny; MTimesA (transform->matrix, Matrix); MTranspose (Matrix); MTimesB (Matrix, transform->inverse); MIdentity (Matrix); Matrix [0][0] = cosz; Matrix [1][1] = cosz; Matrix [0][1] = sinz; Matrix [1][0] = 0.0 - sinz; MTimesA (transform->matrix, Matrix); MTranspose (Matrix); MTimesB (Matrix, transform->inverse); }
static void Transform_Quadric(OBJECT *Object, TRANSFORM *Trans) { QUADRIC *Quadric=(QUADRIC *)Object; MATRIX Quadric_Matrix, Transform_Transposed; Quadric_To_Matrix (Quadric, Quadric_Matrix); MTimesB (Trans->inverse, Quadric_Matrix); MTranspose (Transform_Transposed, Trans->inverse); MTimesA (Quadric_Matrix, Transform_Transposed); Matrix_To_Quadric (Quadric_Matrix, Quadric); Recompute_BBox(&Object->BBox, Trans); }
void Compose_Transforms (TRANSFORM *Original_Transform, const TRANSFORM *New_Transform) { MTimesA(Original_Transform->matrix, New_Transform->matrix); MTimesB(New_Transform->inverse, Original_Transform->inverse); }