| #version 150 core |
| |
| in vec3 vertexPosition; |
| in vec3 vertexNormal; |
| |
| out VertexData { |
| vec3 position; |
| vec3 normal; |
| } v_out; |
| |
| out float gl_ClipDistance[8]; |
| |
| struct Section { |
| vec4 equation; |
| vec3 center; |
| }; |
| |
| struct SectionsData { |
| int sectionsCount; |
| Section sections[8]; |
| }; |
| |
| uniform SectionsData sectionsData; |
| uniform mat4 modelView; |
| uniform mat4 modelMatrix; |
| uniform mat3 modelViewNormal; |
| uniform mat4 mvp; |
| |
| void main() |
| { |
| v_out.normal = normalize( modelViewNormal * vertexNormal ); |
| v_out.position = vec4(modelView * vec4( vertexPosition, 1.0 )).xyz; |
| vec3 worldPos = vec4(modelMatrix * vec4(vertexPosition, 1.0)).xyz; |
| |
| for (int i = 0; i < sectionsData.sectionsCount; ++i) { |
| gl_ClipDistance[i] = dot(vec4(worldPos, 1.0), sectionsData.sections[i].equation); |
| } |
| |
| gl_Position = mvp * vec4( vertexPosition, 1.0 ); |
| } |