summaryrefslogtreecommitdiffstats
path: root/dev/a5-artrender/shaders/outline.vert
blob: 58e13085ee139e075220ca256a1bcc8faeb803bf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#version 330

// CSci-4611 Assignment 5:  Art Render

// TODO: You need to modify this vertex shader to move the edge vertex along
// the normal away from the mesh surface IF you determine that the vertex
// belongs to a silhouette edge.


uniform mat4 model_view_matrix;
uniform mat4 normal_matrix;
uniform mat4 proj_matrix;
uniform float thickness;

layout(location = 0) in vec3 vertex;
layout(location = 1) in vec3 normal;
layout(location = 2) in vec3 left_normal;
layout(location = 3) in vec3 right_normal;

void main() {
    vec3 e = (model_view_matrix * vec4(vertex, 1.0)).xyz;
    vec3 n_vertex = vertex;
    vec3 ln = (normal_matrix * vec4(left_normal, 1.0)).xyz;
    vec3 rn = (normal_matrix * vec4(right_normal, 1.0)).xyz;
    if (dot(ln, e) * dot(rn, e) < 0.0) {
        n_vertex = vertex + thickness * normal;
    }

    gl_Position = proj_matrix * model_view_matrix * vec4(n_vertex,1);
}