void lndr_gen_mv_matrix(Lander *lander) { mat4x4 ident, temp, trans; mat4x4_identity(ident); /* float glx = 2 / glob_game.ppw; float gly = 2 / glob_game.pph; */ /* glx *= lander->x; gly *= lander->y; glx--; gly--; */ float glx = lander->x; float gly = lander->y; mat4x4_scale_aniso(temp, ident, DEFAULT_SCALE, DEFAULT_SCALE, DEFAULT_SCALE); mat4x4_rotate_Z(temp, temp, lander->rotation); mat4x4_translate(trans, glx, gly, 0); mat4x4_mul(ident, trans, temp); mat4x4_transpose(lander->mvMatrix, ident); }
void lndr_gen_jet_mv_matrix(Lander *lander) { if(lander->jetState == JS_OFF) return; float scale = 0; if(lander->jetState == JS_INCREASING || lander->jetState == JS_DECREASING) scale = lander->jetFrames / FLAME_GROW_RATE; else if(lander->jetState == JS_ON) { if(lander->jetFrames < 10) return; lander->jetFrames = 0; int rnd = rand() % 6 - 3; scale = 1.0 + (0.07 * rnd); } mat4x4 ident, temp; mat4x4_identity(ident); mat4x4_translate_in_place(ident, 0, -0.3529412, 0); mat4x4_scale_aniso(temp, ident, 1.0, scale, 1.0); mat4x4_translate_in_place(temp, 0, 0.3529412, 0); mat4x4_transpose(lander->jetMatrix, temp); }
static void recalculate_matrices(struct ball *b) { mat4x4_identity(b->model_matrix); mat4x4_translate_in_place(b->model_matrix, b->x, b->y, b->z); mat4x4_scale_aniso(b->model_matrix, b->model_matrix, SCALE_FACTOR, SCALE_FACTOR, SCALE_FACTOR); mat4x4_invert(b->normal_matrix, b->model_matrix); mat4x4_transpose(b->normal_matrix, b->normal_matrix); }
void lndr_get_current_points(Lander *lander, GLfloat *buf) { int i; for(i = 0; i < 112; i += 2) { GLfloat x = position_data[i]; GLfloat y = position_data[i + 1]; vec4 pt = {x, y, 0, 1}; mat4x4 mat; mat4x4_transpose(mat, lander->mvMatrix); vec4 out; mat4x4_mul_vec4(out, mat, pt); buf[i] = out[0]; buf[i + 1] = out[1]; //printf("%f %f\n", out[0], out[1]); } }