I64 global_r[4][4]; U0 DrawIt(CTask *, CDC *dc) { I64 *old_r = dc->r; dc->thick = 2; dc->color = RED; dc->x = 200; dc->y = 200; dc->flags |= DCF_TRANSFORMATION; DCMat4x4Set(dc, global_r); //This assigns to dc->r and sets r_norm. GrLine3(dc, -100, -100, -100, -100, 100, -100); GrLine3(dc, -100, 100, -100, 100, 100, -100); GrLine3(dc, 100, 100, -100, 100, -100, -100); GrLine3(dc, 100, -100, -100, -100, -100, -100); GrLine3(dc, -100, -100, 100, -100, 100, 100); GrLine3(dc, -100, 100, 100, 100, 100, 100); GrLine3(dc, 100, 100, 100, 100, -100, 100); GrLine3(dc, 100, -100, 100, -100, -100, 100); GrLine3(dc, -100, -100, 100, -100, -100, -100); GrLine3(dc, -100, 100, 100, -100, 100, -100); GrLine3(dc, 100, 100, 100, 100, 100, -100); GrLine3(dc, 100, -100, 100, 100, -100, -100); dc->r = old_r; } U0 Box() { F64 theta = 0, phi = 0, omega = 0, s = 1, s1 = 1.05; SettingsPush; //See SettingsPush DocClear; Fs->draw_it = &DrawIt; while (!CharScan) { Mat4x4IdentEqu(global_r); Mat4x4RotZ(global_r, theta); Mat4x4RotX(global_r, phi); Mat4x4RotZ(global_r, omega); Mat4x4Scale(global_r, s); Sleep(20); theta += 2 * pi / 70; phi += 2 * pi / 90; omega += 2 * pi / 110; s *= s1; if (!(0.2 < s < 1.4)) s1 = 1 / s1; } SettingsPop; } Box;