/////////////////////////////////////////////////////////////////////////////// // // ## ###### // ###### ### // ## ############### Shark 3D Engine (www.shark3d.com) // ########## # # # // ######## Copyright (c) 1996-2006 Spinor GmbH. // ######### # # # All rights reserved. // ## ########## // ## // /////////////////////////////////////////////////////////////////////////////// #include \ /////////////////////////////////////////////////////////////////////////////// struct VS_INPUT { float4 posObj: POSITION; float3 normalObj: NORMAL; float2 texCoord0: TEXCOORD0; float2 color: COLOR0; }; struct VS_OUTPUT { float4 posScr: POSITION; float2 mainTexCoord: TEXCOORD0; float2 texCoord0: TEXCOORD1; float2 texCoord1: TEXCOORD2; float3 diffuse: TEXCOORD3; float3 specular: TEXCOORD4; #ifdef S3D_LIGHT_PROJ float4 lightProjCoord: TEXCOORD5; #endif #ifdef S3D_LIGHT_SHMAP float4 lightShmapCoord: TEXCOORD6; #endif float fog: FOG; }; /////////////////////////////////////////////////////////////////////////////// const float4x4 projMat; const float4x4 matView; const float4 lightCenRange; #ifdef S3D_LIGHT_PROJ const float4x4 lightProjMat; #endif #ifdef S3D_LIGHT_SHMAP const float4x4 lightShmapMat; #endif /////////////////////////////////////////////////////////////////////////////// // Vertexshader // Profile: 1x1 VS_OUTPUT main(VS_INPUT input) { VS_OUTPUT output = (VS_OUTPUT)0; float4 posView = mul(input.posObj, matView); float3 normalView = mul(input.normalObj, matView).xyz; output.posScr = mul(posView, projMat); output.fog = posView.z / posView.w; float3 camToVertView = posView.xyz; float3 vertToLightView = lightCenRange - camToVertView; float3 vertToLightDirView = normalize(vertToLightView); float3 halfDirView = vertToLightDirView - camToVertView; // Lightrange-factor: 1 - (lightpos - surfacepos)^2 / range^2 float3 scaledSurfToLight = vertToLightView / lightCenRange.w; output.diffuse = clamp(dot(vertToLightDirView, input.normalObj), 0.0, 1.0) + clamp(-dot(vertToLightDirView, input.normalObj), 0.0, 1.0); output.specular = pow(saturate(dot(reflect(-normalize(camToVertView), input.normalObj), vertToLightDirView)), S3D_SPECULAR_EXP); #ifdef S3D_LIGHT_PROJ output.lightProjCoord = mul(posView, lightProjMat); #endif #ifdef S3D_LIGHT_SHMAP output.lightShmapCoord = mul(posView, lightShmapMat); #endif output.texCoord0 = input.color.xy; output.texCoord1 = float2(input.texCoord0.x, 1.0 - input.texCoord0.y); return output; } ///////////////////////////////////////////////////////////////////////////////