blob: 141cf9927dbb9519539978cebf56517ab5d6b947 [file] [log] [blame]
#version 150 core
#define M_PI 3.14159265358979323846
in vec3 vertexPosition;
in vec3 vertexNormal;
out vec3 position;
out vec3 normal;
out vec3 kd;
uniform mat4 viewMatrix;
uniform mat4 projectionMatrix;
uniform mat3 modelViewNormal;
uniform int instanceCount;
uniform float time;
const vec3 ZAXIS = vec3(0.0, 0.0, 1.0);
const vec3 XAXIS = vec3(1.0, 0.0, 0.0);
const float radius = 30.0;
float det = 1.0 / float(instanceCount);
mat4 rotationMatrix(vec3 axis, float angle)
{
axis = normalize(axis);
float s = sin(angle);
float c = cos(angle);
float oc = 1.0 - c;
return mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0,
oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0,
oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0,
0.0, 0.0, 0.0, 1.0);
}
mat4 translationMatrix(vec3 translation)
{
return mat4(1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
translation.x, translation.y, translation.z, 0);
}
void main()
{
float angle = M_PI * 2.0f * gl_InstanceID * det * 10.0 * time * 0.05;
vec3 translation = vec3(radius * cos(angle), 200.0 * gl_InstanceID * det, radius * sin(angle));
mat4 modelMatrix = translationMatrix(translation) *
rotationMatrix(ZAXIS, radians(angle * 45.0)) *
rotationMatrix(XAXIS, radians(angle * 30.0));
vec4 eyePosition = viewMatrix *
modelMatrix *
vec4(vertexPosition, 1.0);
position = eyePosition.xyz;
kd = vec3(abs(cos(angle)), 0.75, 25);
normal = normalize(mat3(modelMatrix) * modelViewNormal *
vertexNormal);
gl_Position = projectionMatrix * vec4(position, 1.0);
}