Sin角度加法和Cos角度加法公式推导
Sin(α+β)
Cos(α+β)
2D旋转矩阵推导
通过2d旋转矩阵来理解旋转矩阵
为立方体添加旋转
vec3_t vec3_rotate_x(vec3_t v, float angle)
{
vec3_t roatated_vector = {
.x = v.x,
.y = v.y * cos(angle) - v.z * sin(angle),
.z = v.y * sin(angle) + v.z * cos(angle)
};
return roatated_vector;
}
vec3_t vec3_rotate_y(vec3_t v, float angle)
{
vec3_t rotated_vector = {
.x = v.x * cos(angle) - v.z * sin(angle),
.y = v.y,
.z = v.x * sin(angle) + v.z * cos(angle)
};
return rotated_vector;
}
vec3_t vec3_rotate_z(vec3_t v, float angle){
vec3_t rotated_vector = {
.x = v.x * cos(angle) - v.y * sin(angle),
.y = v.x * sin(angle) + v.y * cos(angle),
.z = v.z
};
return rotated_vector;
}
在vector.c中添加对每个轴旋转的函数。
cube_rotation.x += 0.01;
cube_rotation.y += 0.01;
cube_rotation.z += 0.01;
在update函数中增加旋转角度。
for (int i = 0; i < N_POINTS; i++)
{
vec3_t point = cube_points[i];
vec3_t transformed_point = vec3_rotate_x(point, cube_rotation.x);
transformed_point = vec3_rotate_y(transformed_point, cube_rotation.y);
transformed_point = vec3_rotate_z(transformed_point, cube_rotation.z);
//Move the points away from the camera
transformed_point.z -= camera_position.z;
//Project the current point
vec2_t projected_point = project(transformed_point);
//Save the projected 2D vector in the array of projected points
projected_points[i] = projected_point;
}
对每个顶点应用三个轴的旋转。