-
Notifications
You must be signed in to change notification settings - Fork 1
/
mode7.fx
43 lines (35 loc) · 1.07 KB
/
mode7.fx
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
/////////////////////////////////////////////////////////
// Mode7 effect
//
varying mediump vec2 vTex;
uniform lowp sampler2D samplerFront;
precision highp float;
uniform highp float pos_x;
uniform highp float pos_y;
uniform highp float ang;
uniform highp float pixelWidth;
uniform highp float pixelHeight;
uniform highp float horizon;
uniform highp float fov;
uniform highp float scale_x;
uniform highp float scale_y;
void main(void)
{
float px = vTex.x-0.5;
float py = vTex.y-0.5 - horizon - fov;
float pz = vTex.y-0.5 - horizon;
//projection
float sx = px / pz;
float sy = py / pz;
float sin_ang = sin(radians(ang));
float cos_ang = cos(radians(ang));
float xx = sx * cos_ang - sy * sin_ang;
float yy = - sx * sin_ang - sy * cos_ang;
float tx = xx * scale_x + pos_y;
float ty = yy * scale_y + pos_x;
if (tx > 1.0 || tx < 0.0 || ty > 1.0 || ty < 0.0) {
gl_FragColor = vec4(0.0,0.0,0.0,0.0);
} else {
gl_FragColor = texture2D(samplerFront, vec2(tx, ty));
}
}