Files
CavesOfJolk-libgdx/src/main/resources/lit.vert.glsl

150 lines
3.8 KiB
GLSL

attribute vec3 a_position;
uniform mat4 u_projViewTrans;
#ifdef normalFlag
attribute vec3 a_normal;
uniform mat3 u_normalMatrix;
varying vec3 v_normal;
#endif // normalFlag
#if (defined(tangentFlag) && defined(binormalFlag)) || (defined(bumpHeightFlag) && defined(bumpTextureFlag))
attribute vec3 a_tangent;
attribute vec3 a_binormal;
varying mat3 v_tbn;
#endif // tangentFlag && bitangentFlag
#ifdef colorFlag
varying vec4 v_color;
attribute vec4 a_color;
#endif // colorFlag
#if defined(diffuseTextureFlag) || defined(specularTextureFlag) || defined(emissiveTextureFlag)
#define textureFlag
#endif
#if defined(ambientLightFlag) || defined(ambientCubemapFlag) || defined(sphericalHarmonicsFlag)
#define ambientFlag
#endif // ambientFlag
#ifdef textureFlag
attribute vec2 a_texCoord0;
#endif // textureFlag
#ifdef diffuseTextureFlag
uniform vec4 u_diffuseUVTransform;
varying vec2 v_diffuseUV;
#endif // diffuseTextureFlag
#ifdef bumpTextureFlag
uniform vec4 u_bumpUVTransform;
varying vec2 v_bumpUV;
#endif // bumpTextureFlag
#ifdef normalTextureFlag
uniform vec4 u_normalUVTransform;
varying vec2 v_normalUV;
#endif // normalTextureFlag
#ifdef emissiveTextureFlag
uniform vec4 u_emissiveUVTransform;
varying vec2 v_emissiveUV;
#endif // emissiveTextureFlag
#ifdef specularTextureFlag
uniform vec4 u_specularUVTransform;
varying vec2 v_specularUV;
#endif // specularTextureFlag
uniform mat4 u_worldTrans;
#ifdef lightingFlag
#ifdef ambientLightFlag
uniform vec3 u_ambientLight;
#endif // ambientLightFlag
#ifdef ambientLightFlag
uniform vec3 u_ambientLight;
#endif // ambientLightFlag
#ifdef ambientCubemapFlag
uniform vec3 u_ambientCubemap[6];
#endif // ambientCubemapFlag
/*
#ifdef sphericalHarmonicsFlag
uniform vec3 u_sphericalHarmonics[9];
#endif // sphericalHarmonicsFlag
*/
#ifdef ambientFlag
varying vec3 v_ambient;
#endif // ambientFlag
#endif // lightingFlag
#if defined(lightingFlag) || defined(fogFlag)
varying vec4 v_worldPosition;
#endif // lightingFlag || fogFlag
void main()
{
#ifdef normalFlag
//vec3 normal = (transpose(inverse(u_normalMatrix)) * a_normal);
vec3 normal = normalize(u_normalMatrix * a_normal);
v_normal = normal;
#if defined(tangentFlag) && defined(binormalFlag)
vec3 tangent = normalize(u_normalMatrix * a_tangent);
vec3 bitangent = normalize(u_normalMatrix * a_binormal);
v_tbn = mat3(tangent, bitangent, normal);
#endif // tangentFlag && bitangentFlag
#endif // normalFlag
#ifdef colorFlag
v_color = a_color;
#endif // colorFlag
#ifdef diffuseTextureFlag
v_diffuseUV = u_diffuseUVTransform.xy + a_texCoord0 * u_diffuseUVTransform.zw;
#endif // diffuseTextureFlag
#ifdef bumpTextureFlag
v_bumpUV = u_bumpUVTransform.xy + a_texCoord0 * u_bumpUVTransform.zw;
#endif // bumpTextureFlag
#ifdef normalTextureFlag
v_normalUV = u_normalUVTransform.xy + a_texCoord0 * u_normalUVTransform.zw;
#endif // normalTextureFlag
#ifdef emissiveTextureFlag
v_emissiveUV = u_emissiveUVTransform.xy + a_texCoord0 * u_emissiveUVTransform.zw;
#endif // emissiveTextureFlag
#ifdef specularTextureFlag
v_specularUV = u_specularUVTransform.xy + a_texCoord0 * u_specularUVTransform.zw;
#endif // specularTextureFlag
#ifdef ambientLightFlag
v_ambient = u_ambientLight;
#else // !ambientLightFlag
v_ambient = vec3(0.0);
#endif // ambientLightFlag
#ifdef ambientCubemapFlag
vec3 norm2 = normal * normal;
vec3 isPositive = step(0.0, normal);
v_ambient +=
norm2.x * mix(u_ambientCubemap[0], u_ambientCubemap[1], isPositive.x) +
norm2.y * mix(u_ambientCubemap[2], u_ambientCubemap[3], isPositive.y) +
norm2.z * mix(u_ambientCubemap[4], u_ambientCubemap[5], isPositive.z);
#endif // ambientCubemapFlag
vec4 worldPos = u_worldTrans * vec4(a_position, 1.0);
#if defined(lightingFlag) || defined(fogFlag)
v_worldPosition = worldPos;
//v_cameraPosition = u_cameraPosition;
#endif // lightingFlag || fogFlag
gl_Position = u_projViewTrans * worldPos;
}