three
Version:
JavaScript 3D library
64 lines (36 loc) • 1.27 kB
JavaScript
export default /* glsl */`
vec3 transformedNormal = objectNormal;
vec3 transformedTangent = objectTangent;
// this is in lieu of a per-instance normal-matrix
// shear transforms in the instance matrix are not supported
mat3 bm = mat3( batchingMatrix );
transformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );
transformedNormal = bm * transformedNormal;
transformedTangent = bm * transformedTangent;
// this is in lieu of a per-instance normal-matrix
// shear transforms in the instance matrix are not supported
mat3 im = mat3( instanceMatrix );
transformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );
transformedNormal = im * transformedNormal;
transformedTangent = im * transformedTangent;
transformedNormal = normalMatrix * transformedNormal;
transformedNormal = - transformedNormal;
transformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;
transformedTangent = - transformedTangent;
`;