-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils_bonus.c
95 lines (88 loc) · 3.01 KB
/
utils_bonus.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* utils_bonus.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: amajid <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/19 18:15:02 by amajid #+# #+# */
/* Updated: 2023/12/22 23:21:27 by amajid ### ########.fr */
/* */
/* ************************************************************************** */
#include "fdf.h"
int rotate(t_loop_data *data, t_point p, char direction)
{
if (p.x && direction)
data->rotation = matrix4x4_mul(
matrix4x4_set_rotation_x(5), data->rotation);
if (p.x && !direction)
data->rotation = matrix4x4_mul(
matrix4x4_set_rotation_x(-5), data->rotation);
if (p.y && direction)
data->rotation = matrix4x4_mul(
matrix4x4_set_rotation_y(5), data->rotation);
if (p.y && !direction)
data->rotation = matrix4x4_mul(
matrix4x4_set_rotation_y(-5), data->rotation);
if (p.z && direction)
data->rotation = matrix4x4_mul(
matrix4x4_set_rotation_z(5), data->rotation);
if (p.z && !direction)
data->rotation = matrix4x4_mul(
matrix4x4_set_rotation_z(-5), data->rotation);
return (0);
}
int translate(t_loop_data *data, t_point p, char direction)
{
if (p.x && direction)
data->transition.x += 60.0f;
if (p.x && !direction)
data->transition.x -= 60.0f;
if (p.y && direction)
data->transition.y += 60.0f;
if (p.y && !direction)
data->transition.y -= 60.0f;
if (p.z && direction)
data->transition.z += 60.0f;
if (p.z && !direction)
data->transition.z -= 60.0f;
return (0);
}
int scale(t_loop_data *data, t_point p, char direction)
{
if (p.x && direction)
data->scale.x += data->scale.x / 5;
if (p.x && !direction)
data->scale.x -= data->scale.x / 5;
if (p.y && direction)
data->scale.y += data->scale.y / 5;
if (p.y && !direction)
data->scale.y -= data->scale.y / 5;
if (p.z && direction)
data->scale.z += data->scale.z / 5;
if (p.z && !direction)
data->scale.z -= data->scale.z / 5;
if (data->scale.x <= 0.00000000000f || data->scale.y <= 0.00000000000f
|| data->scale.z <= 0.00000000000f)
data->scale = (t_point){0.00000000001f, 0.00000000001f,
0.000000000001f, 1.0f};
return (0);
}
void animate(t_loop_data *data)
{
if (data->animate)
rotate(data, (t_point){1, 0, 1, 0}, data->anim_dir);
}
void multiview_orthographic_projection(t_loop_data *d)
{
static char xyz;
xyz++;
if (xyz == 0)
d->rotation = matrix4x4_set_rotation_x(90);
if (xyz == 1)
d->rotation = matrix4x4_set_rotation_y(90);
if (xyz == 2)
d->rotation = matrix4x4_set_rotation_z(180);
if (xyz >= 2)
xyz = -1;
}