94 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
/* ************************************************************************** */
 | 
						|
/*                                                                            */
 | 
						|
/*                                                        :::      ::::::::   */
 | 
						|
/*   mat4_rotate.c                                      :+:      :+:    :+:   */
 | 
						|
/*                                                    +:+ +:+         +:+     */
 | 
						|
/*   By: gbrochar <gbrochar@student.42.fr>          +#+  +:+       +#+        */
 | 
						|
/*                                                +#+#+#+#+#+   +#+           */
 | 
						|
/*   Created: 2020/12/24 12:24:54 by gbrochar          #+#    #+#             */
 | 
						|
/*   Updated: 2020/12/26 09:10:47 by gbrochar         ###   ########.fr       */
 | 
						|
/*                                                                            */
 | 
						|
/* ************************************************************************** */
 | 
						|
 | 
						|
#include "mat4.h"
 | 
						|
 | 
						|
t_mat4			mat4_rotatex(t_mat4 m, double theta)
 | 
						|
{
 | 
						|
	double		s = sin(theta);
 | 
						|
	double		c = cos(theta);
 | 
						|
	t_mat4		ret;
 | 
						|
	
 | 
						|
	ret.data[0] = m.data[0];
 | 
						|
	ret.data[1] = m.data[1];
 | 
						|
	ret.data[2] = m.data[2];
 | 
						|
	ret.data[3] = m.data[3];
 | 
						|
	ret.data[4] = m.data[4] * c + m.data[8] * s;
 | 
						|
	ret.data[5] = m.data[5] * c + m.data[9] * s;
 | 
						|
	ret.data[6] = m.data[6] * c + m.data[10] * s;
 | 
						|
	ret.data[7] = m.data[7] * c + m.data[11] * s;
 | 
						|
	ret.data[8] = m.data[8] * c - m.data[4] * s;
 | 
						|
	ret.data[9] = m.data[9] * c - m.data[5] * s;
 | 
						|
	ret.data[10] = m.data[10] * c - m.data[6] * s;
 | 
						|
	ret.data[11] = m.data[11] * c - m.data[7] * s;
 | 
						|
	ret.data[12] = m.data[12];
 | 
						|
	ret.data[13] = m.data[13];
 | 
						|
	ret.data[14] = m.data[14];
 | 
						|
	ret.data[15] = m.data[15];
 | 
						|
	return (ret);
 | 
						|
}
 | 
						|
 | 
						|
t_mat4			mat4_rotatey(t_mat4 m, double theta)
 | 
						|
{
 | 
						|
	double		s = sin(theta);
 | 
						|
	double		c = cos(theta);
 | 
						|
	t_mat4		ret;
 | 
						|
	
 | 
						|
	ret.data[0] = m.data[0] * c - m.data[8] * s;
 | 
						|
	ret.data[1] = m.data[1] * c - m.data[9] * s;
 | 
						|
	ret.data[2] = m.data[2] * c - m.data[10] * s;
 | 
						|
	ret.data[3] = m.data[3] * c - m.data[11] * s;
 | 
						|
	ret.data[4] = m.data[4];
 | 
						|
	ret.data[5] = m.data[5];
 | 
						|
	ret.data[6] = m.data[6];
 | 
						|
	ret.data[7] = m.data[7];
 | 
						|
	ret.data[8] = m.data[8] * c + m.data[0] * s;
 | 
						|
	ret.data[9] = m.data[9] * c + m.data[1] * s;
 | 
						|
	ret.data[10] = m.data[10] * c + m.data[2] * s;
 | 
						|
	ret.data[11] = m.data[11] * c + m.data[3] * s;
 | 
						|
	ret.data[12] = m.data[12];
 | 
						|
	ret.data[13] = m.data[13];
 | 
						|
	ret.data[14] = m.data[14];
 | 
						|
	ret.data[15] = m.data[15];
 | 
						|
	return (ret);
 | 
						|
}
 | 
						|
 | 
						|
t_mat4			mat4_rotatez(t_mat4 m, double theta)
 | 
						|
{
 | 
						|
	double		s = sin(theta);
 | 
						|
	double		c = cos(theta);
 | 
						|
	t_mat4		ret;
 | 
						|
	
 | 
						|
	ret.data[0] = m.data[0] * c + m.data[4] * s;
 | 
						|
	ret.data[1] = m.data[1] * c + m.data[5] * s;
 | 
						|
	ret.data[2] = m.data[2] * c + m.data[6] * s;
 | 
						|
	ret.data[3] = m.data[3] * c + m.data[7] * s;
 | 
						|
	ret.data[4] = m.data[4] * c - m.data[0] * s;
 | 
						|
	ret.data[5] = m.data[5] * c - m.data[1] * s;
 | 
						|
	ret.data[6] = m.data[6] * c - m.data[2] * s;
 | 
						|
	ret.data[7] = m.data[7] * c - m.data[3] * s;
 | 
						|
	ret.data[8] = m.data[8];
 | 
						|
	ret.data[9] = m.data[9];
 | 
						|
	ret.data[10] = m.data[10];
 | 
						|
	ret.data[11] = m.data[11];
 | 
						|
	ret.data[12] = m.data[12];
 | 
						|
	ret.data[13] = m.data[13];
 | 
						|
	ret.data[14] = m.data[14];
 | 
						|
	ret.data[15] = m.data[15];
 | 
						|
	return (ret);
 | 
						|
}
 | 
						|
 | 
						|
t_mat4			mat4_rotatexyz(t_mat4 m, t_vec3 theta)
 | 
						|
{
 | 
						|
	return (
 | 
						|
		mat4_rotatey(mat4_rotatex(mat4_rotatez(m, theta.z), theta.x), theta.y));
 | 
						|
} |