File: useShadowMapInstancingVS.glsl

package info (click to toggle)
bullet 2.83.7%2Bdfsg-5
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 48,772 kB
  • sloc: cpp: 355,312; lisp: 12,087; ansic: 11,969; python: 644; makefile: 116; xml: 27
file content (86 lines) | stat: -rw-r--r-- 1,968 bytes parent folder | download
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
#version 330 
precision highp float;


layout (location = 0) in vec4 position;
layout (location = 1) in vec4 instance_position;
layout (location = 2) in vec4 instance_quaternion;
layout (location = 3) in vec2 uvcoords;
layout (location = 4) in vec3 vertexnormal;
layout (location = 5) in vec4 instance_color;
layout (location = 6) in vec3 instance_scale;


uniform mat4 ModelViewMatrix;
uniform mat4 ProjectionMatrix;
uniform mat4 DepthBiasModelViewProjectionMatrix;
uniform mat4 MVP;
uniform vec3 lightDirIn;

out vec4 ShadowCoord;

out Fragment
{
     vec4 color;
} fragment;

out Vert
{
	vec2 texcoord;
} vert;


vec4 quatMul ( in vec4 q1, in vec4 q2 )
{
    vec3  im = q1.w * q2.xyz + q1.xyz * q2.w + cross ( q1.xyz, q2.xyz );
    vec4  dt = q1 * q2;
    float re = dot ( dt, vec4 ( -1.0, -1.0, -1.0, 1.0 ) );
    return vec4 ( im, re );
}

vec4 quatFromAxisAngle(vec4 axis, in float angle)
{
    float cah = cos(angle*0.5);
    float sah = sin(angle*0.5);
	float d = inversesqrt(dot(axis,axis));
	vec4 q = vec4(axis.x*sah*d,axis.y*sah*d,axis.z*sah*d,cah);
	return q;
}
//
// vector rotation via quaternion
//
vec4 quatRotate3 ( in vec3 p, in vec4 q )
{
    vec4 temp = quatMul ( q, vec4 ( p, 0.0 ) );
    return quatMul ( temp, vec4 ( -q.x, -q.y, -q.z, q.w ) );
}
vec4 quatRotate ( in vec4 p, in vec4 q )
{
    vec4 temp = quatMul ( q, p );
    return quatMul ( temp, vec4 ( -q.x, -q.y, -q.z, q.w ) );
}

out vec3 lightDir,normal,ambient;

void main(void)
{
	vec4 q = instance_quaternion;
	ambient = vec3(0.6,.6,0.6);
			
	vec4 worldNormal = (quatRotate3( vertexnormal,q));
	
	normal = normalize(worldNormal).xyz;

	lightDir = lightDirIn;
		
	
	vec4 localcoord = quatRotate3( position.xyz*instance_scale,q);
	vec4 vertexPos = MVP* vec4((instance_position+localcoord).xyz,1);

	gl_Position = vertexPos;
	ShadowCoord = DepthBiasModelViewProjectionMatrix * vec4((instance_position+localcoord).xyz,1);

	fragment.color = instance_color;
	vert.texcoord = uvcoords;
}