-
Notifications
You must be signed in to change notification settings - Fork 0
/
cartoon_ground.vp
87 lines (72 loc) · 2.47 KB
/
cartoon_ground.vp
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
!!ARBvp1.0
#
# cartoon lighting
# standard lighting, separation between color, shade and specular
# single point light at GL_LIGHT0
#
ATTRIB iPos = vertex.position;
ATTRIB iNormal = vertex.normal;
# PARAM mvinv[4] = { state.matrix.modelview.invtrans };
PARAM mvp[4] = { state.matrix.mvp };
PARAM mv[4] = { state.matrix.modelview };
PARAM vinv[4] = { state.matrix.program[0].inverse };
PARAM camera = program.local[0];
PARAM lightPos = state.light[0].position;
PARAM specExp = state.material.shininess;
PARAM ambientCol = state.lightprod[0].ambient;
PARAM diffuseCol = state.lightprod[0].diffuse;
PARAM specularCol = state.lightprod[0].specular;
PARAM zero = {0.0, 0.0, 0.0, 1.0};
PARAM lum = {0.3, 0.6, 0.1, 1.0};
PARAM oneHalf = {0.5, 0.5, 0.5, 1.0};
PARAM Z = {0.0, 0.0, 1.0, 1.0};
TEMP tmpPos, xfNormal, xfLight, xfV, halfDir, temp, dots;
OUTPUT oPos = result.position;
OUTPUT oColor = result.color;
OUTPUT oTexture0 = result.texcoord[0];
OUTPUT oTexture1 = result.texcoord[1];
OUTPUT oTexture2 = result.texcoord[2];
OUTPUT oTexture3 = result.texcoord[2];
# Transform vertex to camera space
DP4 xfV.x, mv[0], iPos;
DP4 xfV.y, mv[1], iPos;
DP4 xfV.z, mv[2], iPos;
DP4 xfV.w, mv[3], iPos;
# Transform normal to camera space
DP3 xfNormal.x, mv[0], iNormal;
DP3 xfNormal.y, mv[1], iNormal;
DP3 xfNormal.z, mv[2], iNormal;
# Normalized light direction (light is in camera space)
ADD xfLight, lightPos, -xfV;
DP3 temp.w, xfLight, xfLight;
RSQ temp.w, temp.w;
MUL xfLight.xyz, temp.w, xfLight;
# Normalized view direction
DP3 temp.w, xfV, xfV;
RSQ temp.w, temp.w;
MUL xfV.xyz, -temp.w, xfV;
# halfDir
ADD halfDir, xfV, xfLight;
MUL halfDir, oneHalf, halfDir;
# Compute diffuse and specular dot products and use LIT to compute
# lighting coefficients.
#
# get rid of the specular calculations asap.
#
DP3 dots.x, xfNormal, xfLight;
DP3 dots.y, xfNormal, halfDir;
MOV dots.w, specExp.x;
LIT dots, dots;
# Transform the vertex to clip coordinates.
DP4 oPos.x, mvp[0], iPos;
DP4 oPos.y, mvp[1], iPos;
DP4 oPos.z, mvp[2], iPos;
DP4 oPos.w, mvp[3], iPos;
# bypass color&texture assignment
MOV oColor, vertex.color;
MUL oColor.w, vertex.color.w, dots.y;
MOV oTexture0, vertex.texcoord[0];
MOV oTexture1, vertex.texcoord[1];
MOV oTexture2, vertex.texcoord[2];
MOV oTexture3, vertex.texcoord[3];
END