attribute vec3 in_Position; attribute vec4 in_Colour; attribute vec2 in_TextureCoord; attribute vec3 in_Colour0; attribute vec2 in_Colour1; attribute float in_Colour2; attribute vec3 in_Colour3; attribute float in_Colour4; attribute vec3 in_Colour5; #define in_Offset in_Colour0 #define in_Scale in_Colour1 #define in_Angle in_Colour2 #define in_RotationDirection in_Colour3 #define in_Animation in_Colour4 #define in_Hsv in_Colour5 varying vec2 v_vTexcoord; varying vec4 v_vColour; varying vec3 v_vHsv; mat4 rotation_matrix_3d(vec3 axis, float angle) { 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); } void main() { mat4 rotmat = rotation_matrix_3d(in_RotationDirection, in_Angle); vec4 pos = vec4(in_Position.xy * in_Scale, in_Position.z, 1.0) * rotmat + vec4(in_Offset, 0.0); gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * pos; v_vColour = in_Colour; v_vTexcoord = in_TextureCoord + vec2(in_Animation, 0.0); v_vHsv = in_Hsv; }