home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2006 February / Gamestar_81_2006-02_dvd.iso / Dema / roboblitz_demo.msi / disk1.cab / LocalVertexFactory.cg < prev    next >
Text File  |  2005-03-31  |  2KB  |  64 lines

  1. /*=============================================================================
  2.     LocalVertexFactory.hlsl: Local vertex factory shader code.
  3.     Copyright 2004 Epic Games, Inc. All Rights Reserved.
  4.  
  5.     Revision history:
  6.         * Branched from HLSL code by Daniel Vogel.
  7. =============================================================================*/
  8.  
  9. float4x4 LocalToWorld;
  10. float3x3 WorldToLocal;
  11. float4 ShadowCoordinateScaleBias;
  12.  
  13. struct vertexInput
  14. {
  15.     float4    Position    : POSITION;
  16.     half3    TangentX    : TEXCOORD6;    //    TANGENT
  17.     half3    TangentY    : TEXCOORD7;    //    BINORMAL
  18.     half3    TangentZ    : NORMAL;        //    NORMAL
  19. #if NUM_USER_TEXCOORDS
  20.     float2    UserTexCoords[NUM_USER_TEXCOORDS] : TEXCOORD0;
  21. #endif
  22.     float2    LightMapCoordinate : COLOR;
  23. };
  24.  
  25. struct vertexFactoryInterpolants
  26. {
  27.     float2    LightMapCoordinate                    : TEXCOORD0;
  28. #if NUM_USER_TEXCOORDS
  29.     float2    UserTexCoords[NUM_USER_TEXCOORDS]    : TEXCOORD1;
  30. #endif
  31. };
  32.  
  33. userShaderInput getUserShaderInputs(vertexFactoryInterpolants Interpolants)
  34. {
  35.     userShaderInput    Result;
  36. #if NUM_USER_TEXCOORDS
  37.     for(int CoordinateIndex = 0;CoordinateIndex < NUM_USER_TEXCOORDS;CoordinateIndex++)
  38.         Result.UserTexCoords[CoordinateIndex] = Interpolants.UserTexCoords[CoordinateIndex];
  39. #endif
  40.     Result.UserVertexColor = 1;
  41.     Result.TangentNormal = Result.TangentCameraVector = Result.TangentReflectionVector = Result.TangentLightVector = 0;
  42.     return Result;
  43. }
  44.  
  45. float2 getLightMapCoordinate(vertexFactoryInterpolants Interpolants)
  46. {
  47.     return Interpolants.LightMapCoordinate;
  48. }
  49.  
  50. float4 vertexFactoryGetWorldPosition(vertexInput Input,out vertexFactoryInterpolants Interpolants)
  51. {
  52. #if NUM_USER_TEXCOORDS
  53.     for(int CoordIndex = 0;CoordIndex < NUM_USER_TEXCOORDS;CoordIndex++)
  54.         Interpolants.UserTexCoords[CoordIndex] = Input.UserTexCoords[CoordIndex];
  55. #endif
  56.  
  57.     Interpolants.LightMapCoordinate = Input.LightMapCoordinate * ShadowCoordinateScaleBias.xy + ShadowCoordinateScaleBias.wz;
  58.     return mul(LocalToWorld,Input.Position);
  59. }
  60.  
  61. float3 vertexFactoryWorldToTangentSpace(vertexInput Input,half3 WorldVector)
  62. {
  63.     return mul(float3x3(Input.TangentX,Input.TangentY,Input.TangentZ) / 127.5,mul(WorldToLocal,WorldVector));
  64. }