-
Timothee Darcet authoredTimothee Darcet authored
shader.vert.glsl 1.31 KiB
#version 330 core
layout (location = 0) in vec4 position;
layout (location = 1) in vec4 normal;
layout (location = 2) in vec4 color;
layout (location = 3) in vec2 texture_uv;
out struct fragment_data
{
vec4 position;
vec4 normal;
vec4 color;
vec2 texture_uv;
} fragment;
// model transformation
uniform vec3 translation = vec3(0.0, 0.0, 0.0); // user defined translation
uniform mat3 rotation = mat3(1.0,0.0,0.0, 0.0,1.0,0.0, 0.0,0.0,1.0); // user defined rotation
uniform float scaling = 1.0; // user defined scaling
uniform vec3 scaling_axis = vec3(1.0,1.0,1.0); // user defined scaling
// view transform
uniform mat4 view;
// perspective matrix
uniform mat4 perspective;
void main()
{
// scaling matrix
mat4 S = mat4(scaling*scaling_axis.x,0.0,0.0,0.0, 0.0,scaling*scaling_axis.y,0.0,0.0, 0.0,0.0,scaling*scaling_axis.z,0.0, 0.0,0.0,0.0,1.0);
// 4x4 rotation matrix
mat4 R = mat4(rotation);
// 4D translation
vec4 T = vec4(translation,0.0);
fragment.color = color;
fragment.texture_uv = texture_uv;
fragment.normal = R*normal;
vec4 position_transformed = R*S*position + T;
fragment.position = position_transformed;
gl_Position = perspective * view * position_transformed;
}