@ -0,0 +1,27 @@ | |||
#version 120 | |||
// Input vertex attributes (from vertex shader) | |||
varying vec3 fragPosition; | |||
// Input uniform values | |||
uniform sampler2D equirectangularMap; | |||
vec2 SampleSphericalMap(vec3 v) | |||
{ | |||
vec2 uv = vec2(atan(v.z, v.x), asin(v.y)); | |||
uv *= vec2(0.1591, 0.3183); | |||
uv += 0.5; | |||
return uv; | |||
} | |||
void main() | |||
{ | |||
// Normalize local position | |||
vec2 uv = SampleSphericalMap(normalize(fragPosition)); | |||
// Fetch color from texture map | |||
vec3 color = texture2D(equirectangularMap, uv).rgb; | |||
// Calculate final fragment color | |||
gl_FragColor = vec4(color, 1.0); | |||
} |
@ -0,0 +1,20 @@ | |||
#version 120 | |||
// Input vertex attributes | |||
attribute vec3 vertexPosition; | |||
// Input uniform values | |||
uniform mat4 matProjection; | |||
uniform mat4 matView; | |||
// Output vertex attributes (to fragment shader) | |||
varying vec3 fragPosition; | |||
void main() | |||
{ | |||
// Calculate fragment position based on model transformations | |||
fragPosition = vertexPosition; | |||
// Calculate final vertex position | |||
gl_Position = matProjection*matView*vec4(vertexPosition, 1.0); | |||
} |
@ -0,0 +1,18 @@ | |||
#version 120 | |||
// Input vertex attributes (from vertex shader) | |||
varying vec2 fragTexCoord; | |||
varying vec4 fragColor; | |||
// Input uniform values | |||
uniform sampler2D texture0; | |||
uniform vec4 colDiffuse; | |||
void main() | |||
{ | |||
// Fetch color from texture sampler | |||
vec4 texelColor = texture2D(texture0, fragTexCoord); | |||
// Calculate final fragment color | |||
gl_FragColor = texelColor*colDiffuse*fragColor; | |||
} |
@ -0,0 +1,59 @@ | |||
#version 120 | |||
#define MAX_BONE_NUM 64 | |||
// Input vertex attributes | |||
attribute vec3 vertexPosition; | |||
attribute vec2 vertexTexCoord; | |||
attribute vec4 vertexColor; | |||
attribute vec4 vertexBoneIds; | |||
attribute vec4 vertexBoneWeights; | |||
// Input uniform values | |||
uniform mat4 mvp; | |||
uniform mat4 boneMatrices[MAX_BONE_NUM]; | |||
// Output vertex attributes (to fragment shader) | |||
varying vec2 fragTexCoord; | |||
varying vec4 fragColor; | |||
void main() | |||
{ | |||
int boneIndex0 = int(vertexBoneIds.x); | |||
int boneIndex1 = int(vertexBoneIds.y); | |||
int boneIndex2 = int(vertexBoneIds.z); | |||
int boneIndex3 = int(vertexBoneIds.w); | |||
// WARNING: OpenGL ES 2.0 does not support automatic matrix transposing, neither transpose() function | |||
mat4 boneMatrixTransposed0 = mat4( | |||
vec4(boneMatrices[boneIndex0][0].x, boneMatrices[boneIndex0][1].x, boneMatrices[boneIndex0][2].x, boneMatrices[boneIndex0][3].x), | |||
vec4(boneMatrices[boneIndex0][0].y, boneMatrices[boneIndex0][1].y, boneMatrices[boneIndex0][2].y, boneMatrices[boneIndex0][3].y), | |||
vec4(boneMatrices[boneIndex0][0].z, boneMatrices[boneIndex0][1].z, boneMatrices[boneIndex0][2].z, boneMatrices[boneIndex0][3].z), | |||
vec4(boneMatrices[boneIndex0][0].w, boneMatrices[boneIndex0][1].w, boneMatrices[boneIndex0][2].w, boneMatrices[boneIndex0][3].w)); | |||
mat4 boneMatrixTransposed1 = mat4( | |||
vec4(boneMatrices[boneIndex1][0].x, boneMatrices[boneIndex1][1].x, boneMatrices[boneIndex1][2].x, boneMatrices[boneIndex1][3].x), | |||
vec4(boneMatrices[boneIndex1][0].y, boneMatrices[boneIndex1][1].y, boneMatrices[boneIndex1][2].y, boneMatrices[boneIndex1][3].y), | |||
vec4(boneMatrices[boneIndex1][0].z, boneMatrices[boneIndex1][1].z, boneMatrices[boneIndex1][2].z, boneMatrices[boneIndex1][3].z), | |||
vec4(boneMatrices[boneIndex1][0].w, boneMatrices[boneIndex1][1].w, boneMatrices[boneIndex1][2].w, boneMatrices[boneIndex1][3].w)); | |||
mat4 boneMatrixTransposed2 = mat4( | |||
vec4(boneMatrices[boneIndex2][0].x, boneMatrices[boneIndex2][1].x, boneMatrices[boneIndex2][2].x, boneMatrices[boneIndex2][3].x), | |||
vec4(boneMatrices[boneIndex2][0].y, boneMatrices[boneIndex2][1].y, boneMatrices[boneIndex2][2].y, boneMatrices[boneIndex2][3].y), | |||
vec4(boneMatrices[boneIndex2][0].z, boneMatrices[boneIndex2][1].z, boneMatrices[boneIndex2][2].z, boneMatrices[boneIndex2][3].z), | |||
vec4(boneMatrices[boneIndex2][0].w, boneMatrices[boneIndex2][1].w, boneMatrices[boneIndex2][2].w, boneMatrices[boneIndex2][3].w)); | |||
mat4 boneMatrixTransposed3 = mat4( | |||
vec4(boneMatrices[boneIndex3][0].x, boneMatrices[boneIndex3][1].x, boneMatrices[boneIndex3][2].x, boneMatrices[boneIndex3][3].x), | |||
vec4(boneMatrices[boneIndex3][0].y, boneMatrices[boneIndex3][1].y, boneMatrices[boneIndex3][2].y, boneMatrices[boneIndex3][3].y), | |||
vec4(boneMatrices[boneIndex3][0].z, boneMatrices[boneIndex3][1].z, boneMatrices[boneIndex3][2].z, boneMatrices[boneIndex3][3].z), | |||
vec4(boneMatrices[boneIndex3][0].w, boneMatrices[boneIndex3][1].w, boneMatrices[boneIndex3][2].w, boneMatrices[boneIndex3][3].w)); | |||
vec4 skinnedPosition = | |||
vertexBoneWeights.x*(boneMatrixTransposed0*vec4(vertexPosition, 1.0)) + | |||
vertexBoneWeights.y*(boneMatrixTransposed1*vec4(vertexPosition, 1.0)) + | |||
vertexBoneWeights.z*(boneMatrixTransposed2*vec4(vertexPosition, 1.0)) + | |||
vertexBoneWeights.w*(boneMatrixTransposed3*vec4(vertexPosition, 1.0)); | |||
fragTexCoord = vertexTexCoord; | |||
fragColor = vertexColor; | |||
gl_Position = mvp*skinnedPosition; | |||
} |
@ -0,0 +1,29 @@ | |||
#version 120 | |||
// Input vertex attributes (from vertex shader) | |||
varying vec3 fragPosition; | |||
// Input uniform values | |||
uniform samplerCube environmentMap; | |||
uniform bool vflipped; | |||
uniform bool doGamma; | |||
void main() | |||
{ | |||
// Fetch color from texture map | |||
vec4 texelColor = vec4(0.0); | |||
if (vflipped) texelColor = textureCube(environmentMap, vec3(fragPosition.x, -fragPosition.y, fragPosition.z)); | |||
else texelColor = textureCube(environmentMap, fragPosition); | |||
vec3 color = vec3(texelColor.x, texelColor.y, texelColor.z); | |||
if (doGamma) // Apply gamma correction | |||
{ | |||
color = color/(color + vec3(1.0)); | |||
color = pow(color, vec3(1.0/2.2)); | |||
} | |||
// Calculate final fragment color | |||
gl_FragColor = vec4(color, 1.0); | |||
} |
@ -0,0 +1,24 @@ | |||
#version 120 | |||
// Input vertex attributes | |||
attribute vec3 vertexPosition; | |||
// Input uniform values | |||
uniform mat4 matProjection; | |||
uniform mat4 matView; | |||
// Output vertex attributes (to fragment shader) | |||
varying vec3 fragPosition; | |||
void main() | |||
{ | |||
// Calculate fragment position based on model transformations | |||
fragPosition = vertexPosition; | |||
// Remove translation from the view matrix | |||
mat4 rotView = mat4(mat3(matView)); | |||
vec4 clipPos = matProjection*rotView*vec4(vertexPosition, 1.0); | |||
// Calculate final vertex position | |||
gl_Position = clipPos; | |||
} |
@ -0,0 +1,28 @@ | |||
#version 120 | |||
// Input vertex attributes (from vertex shader) | |||
varying vec2 fragTexCoord; | |||
// Input uniform values | |||
uniform sampler2D depthTexture; | |||
uniform bool flipY; | |||
float nearPlane = 0.1; | |||
float farPlane = 100.0; | |||
void main() | |||
{ | |||
// Handle potential Y-flipping | |||
vec2 texCoord = fragTexCoord; | |||
if (flipY) | |||
texCoord.y = 1.0 - texCoord.y; | |||
// Sample depth texture | |||
float depth = texture2D(depthTexture, texCoord).r; | |||
// Linearize depth | |||
float linearDepth = (2.0*nearPlane)/(farPlane + nearPlane - depth*(farPlane - nearPlane)); | |||
// Output final color | |||
gl_FragColor = vec4(vec3(linearDepth), 1.0); | |||
} |