danini-the-panini/mittsu-opengl

View on GitHub
lib/mittsu/opengl/shader/chunks/envmap_fragment.glsl

Summary

Maintainability
Test Coverage
#ifdef USE_ENVMAP

    #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )

        vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );

        // Transforming Normal Vectors with the Inverse Transformation
        vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );

        #ifdef ENVMAP_MODE_REFLECTION

            vec3 reflectVec = reflect( cameraToVertex, worldNormal );

        #else

            vec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );

        #endif

    #else

        vec3 reflectVec = vReflect;

    #endif

    #ifdef DOUBLE_SIDED
        float flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );
    #else
        float flipNormal = 1.0;
    #endif

    #ifdef ENVMAP_TYPE_CUBE
        vec4 envColor = texture( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );

    #elif defined( ENVMAP_TYPE_EQUIREC )
        vec2 sampleUV;
        sampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );
        sampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;
        vec4 envColor = texture( envMap, sampleUV );

    #elif defined( ENVMAP_TYPE_SPHERE )
        vec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));
        vec4 envColor = texture( envMap, reflectView.xy * 0.5 + 0.5 );
    #endif

    envColor.xyz = inputToLinear( envColor.xyz );

    #ifdef ENVMAP_BLENDING_MULTIPLY

        outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );

    #elif defined( ENVMAP_BLENDING_MIX )

        outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );

    #elif defined( ENVMAP_BLENDING_ADD )

        outgoingLight += envColor.xyz * specularStrength * reflectivity;

    #endif

#endif