#version 430 core
layout(location = 0) in vec3 positions;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform float col;
uniform float dX, dY;
mat4 X_Rotate(in float col)
{
	return 	(mat4(1.0, 0.0, 0.0, 0.0
		, 0.0, cos(col), -sin(col), 0.0
		, 0.0, sin(col), cos(col), 0.0
		, 0.0, 0.0, 0.0, 1.0));
}
mat4 Y_Rotate(in float col)
{
	return (mat4(cos(col), 0.0, -sin(col), 0.0
		, 0.0, 1.0, 0.0, 0.0
		, sin(col), 0.0, cos(col), 0.0
		, 0.0, 0.0, 0.0, 1.0));
}
mat4 Z_Rotate(in float col)
{
	return (mat4(cos(col), -sin(col), 0.0, 0.0
		, sin(col), cos(col), 0.0, 0.0
		, 0.0, 0.0, 1.0, 0.0
		, 0.0, 0.0, 0.0, 1.0));
}
mat4 model_rotate()
{
	mat4 X = X_Rotate(0.1*col);
	mat4 Y = Y_Rotate(0.1*col);
	mat4 Z = Z_Rotate(0.1*col);
	return (model * X * Y * Z);
}
mat4 projection_rotate()
{
	mat4 X = X_Rotate(dX*dX+dY*dY);
	mat4 Y = Y_Rotate(1*col);
//	mat4 Z = Z_Rotate(col);
	return (projection * X * Y);
}
void main() 
{
	mat4 U_projection = projection_rotate();
	mat4 U_model = model_rotate();
	gl_Position = U_projection * view * U_model * vec4(positions, 1);
}