/////////////////////////////////////////////////////////////////////////////// // // ## ###### // ###### ### // ## ############### Shark 3D Engine (www.shark3d.com) // ########## # # # // ######## Copyright (c) 1996-2006 Spinor GmbH. // ######### # # # All rights reserved. // ## ########## // ## // /////////////////////////////////////////////////////////////////////////////// @include "levelutil/shader/prog/ogl_glsl/" \ "include_stddef_ogl_glsl_vs1x0.s3d_shadercode_run" /////////////////////////////////////////////////////////////////////////////// S3D_BONE_DECL_STD(boneWgh, boneSubscr) S3D_MATBONE_DECL_STD(matBone) uniform vec4 lightCenRange; @ifdef S3D_LIGHT_BRIGHT uniform mat4 lightBrightMat; @endif @ifdef S3D_LIGHT_PROJ uniform mat4 lightProjMat; @endif @ifdef S3D_LIGHT_SHMAP uniform mat4 lightShmapMat; @endif /////////////////////////////////////////////////////////////////////////////// @define S3D_NORMALIZE(v) normalize(v) //@define S3D_NORMALIZE(v) (v) /////////////////////////////////////////////////////////////////////////////// void main(void) { S3D_BONE_TRANSF_STD(matBoneFinal, matBone, boneWgh, boneSubscr); vec4 posView = matBoneFinal * gl_Vertex; vec3 normalView = (matBoneFinal * vec4(gl_Normal, 0.0)).xyz; vec3 tangentUObj = S3D_NORMALIZE(gl_MultiTexCoord1.xyz); vec3 tangentVObj = S3D_NORMALIZE(gl_MultiTexCoord2.xyz); vec3 tangentUView = (matBoneFinal * vec4(tangentUObj, 0)).xyz; vec3 tangentVView = (matBoneFinal * vec4(tangentVObj, 0)).xyz; gl_Position = gl_ProjectionMatrix * posView; gl_TexCoord[0] = gl_MultiTexCoord0; gl_FogFragCoord = posView.z / posView.w; vec3 camToVertView = posView.xyz; vec3 vertToLightView = lightCenRange.xyz - camToVertView; vec3 vertToLightDirView = S3D_NORMALIZE(vertToLightView); vec3 halfDirView = S3D_NORMALIZE(vertToLightDirView - camToVertView); // ATI workaround: Don't use x component of gl_TexCoord[2]: s3d_calcBump( gl_TexCoord[1].xyz, gl_TexCoord[2].yzw, normalView, vertToLightDirView, halfDirView, tangentUView, tangentVView); // Lightrange-factor: 1 - (lightpos - surfacepos)^2 / range^2 gl_TexCoord[3].xyz = vertToLightView / lightCenRange.w; @ifdef S3D_PARALLAX_MAPPING gl_TexCoord[4].x = dot(tangentUView, camToVertView); gl_TexCoord[4].y = dot(tangentVView, camToVertView); gl_TexCoord[4].z = dot(normalView, camToVertView); @endif @ifdef S3D_LIGHT_BRIGHT gl_TexCoord[5] = lightBrightMat * posView; gl_TexCoord[6] = gl_Position; @endif @ifdef S3D_LIGHT_PROJ gl_TexCoord[5] = lightProjMat * posView; @endif @ifdef S3D_LIGHT_SHMAP gl_TexCoord[6] = lightShmapMat * posView; @endif } ///////////////////////////////////////////////////////////////////////////////