|
1 | 1 | // http://www.thetenthplanet.de/archives/1180
|
2 | 2 | void getTBN() {
|
3 |
| - vec2 uv = $UV; |
| 3 | + MEDP vec2 uv = $UV; |
4 | 4 |
|
5 | 5 | // get edge vectors of the pixel triangle
|
6 |
| - vec3 dp1 = dFdx( vPositionW ); |
7 |
| - vec3 dp2 = dFdy( vPositionW ); |
8 |
| - vec2 duv1 = dFdx( uv ); |
9 |
| - vec2 duv2 = dFdy( uv ); |
| 6 | + MEDP vec3 dp1 = dFdx( vPositionW ); |
| 7 | + MEDP vec3 dp2 = dFdy( vPositionW ); |
| 8 | + MEDP vec2 duv1 = dFdx( uv ); |
| 9 | + MEDP vec2 duv2 = dFdy( uv ); |
10 | 10 |
|
11 | 11 | // solve the linear system
|
12 |
| - vec3 dp2perp = cross( dp2, dVertexNormalW ); |
13 |
| - vec3 dp1perp = cross( dVertexNormalW, dp1 ); |
14 |
| - vec3 T = dp2perp * duv1.x + dp1perp * duv2.x; |
15 |
| - vec3 B = dp2perp * duv1.y + dp1perp * duv2.y; |
| 12 | + MEDP vec3 dp2perp = cross( dp2, dVertexNormalW ); |
| 13 | + MEDP vec3 dp1perp = cross( dVertexNormalW, dp1 ); |
| 14 | + MEDP vec3 T = dp2perp * duv1.x + dp1perp * duv2.x; |
| 15 | + MEDP vec3 B = dp2perp * duv1.y + dp1perp * duv2.y; |
16 | 16 |
|
17 | 17 | // construct a scale-invariant frame
|
18 |
| - float invmax = 1.0 / sqrt( max( dot(T,T), dot(B,B) ) ); |
| 18 | + MEDP float invmax = 1.0 / sqrt( max( dot(T,T), dot(B,B) ) ); |
19 | 19 | dTBN = mat3( T * invmax, B * invmax, dVertexNormalW );
|
20 | 20 | }
|
0 commit comments