@ -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); | |||||
} |