Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //========= Copyright © 1996-2006, Valve Corporation, All rights reserved. ============//
- // DYNAMIC: "COMPRESSED_VERTS" "0..1"
- // DYNAMIC: "SKINNING" "0..1"
- // Includes
- #include "common_vs_fxc.h"
- const float4 g_mBaseTexCoordTransform[2] : register( SHADER_SPECIFIC_CONST_1 );
- //SHADER_SPECIFIC_CONST_2
- const float4 vEyePos : register(c1);
- struct VS_OUTPUT
- {
- float4 Position : POSITION;
- float2 vFragPos : TEXCOORD0;
- float2 vBaseCoord : TEXCOORD1;
- float3 vNormal : TEXCOORD2;
- float3 vViewDir : TEXCOORD3;
- float3 worldPos_projPosZ : TEXCOORD4;
- float3 lightAtten : TEXCOORD5;
- float3 detailTexCoord_atten3 : TEXCOORD6;
- float3 vBinormal : TEXCOORD7;
- float3 vTangent : TEXCOORD8;
- float3 wCameraPosition : TEXCOORD9;
- };
- // Structs
- struct VS_INPUT
- {
- float4 vPos : POSITION; // Position
- float4 vNormal : NORMAL; // Normal
- float4 vBoneWeights : BLENDWEIGHT; // Skin weights
- float4 vBoneIndices : BLENDINDICES; // Skin indices
- float4 vTexCoord0 : TEXCOORD0; // Base texture coordinates
- float4 vUserData : TANGENT;
- };
- VS_OUTPUT main( const VS_INPUT i )
- {
- VS_OUTPUT o;
- // Decompress compressed normal and tangent
- float4 vObjPosition = i.vPos.xyzw;
- float3 vObjNormal;
- float4 vObjTangent;
- DecompressVertex_NormalTangent( i.vNormal, i.vUserData, vObjNormal, vObjTangent );
- // Transform the position
- float3 vWorldPosition = { 0.0f, 0.0f, 0.0f };
- float3 vWorldNormal = { 0.0f, 0.0f, 0.0f };
- float3 vWorldTangent = { 0.0f, 0.0f, 0.0f };
- float3 vWorldBinormal = { 0.0f, 0.0f, 0.0f };
- SkinPositionNormalAndTangentSpace( false, vObjPosition, vObjNormal.xyz, vObjTangent.xyzw, i.vBoneWeights, i.vBoneIndices, vWorldPosition, vWorldNormal, vWorldTangent, vWorldBinormal );
- vWorldPosition = vWorldPosition;
- vWorldNormal.xyz = normalize( vWorldNormal.xyz );
- vWorldTangent.xyz = normalize( vWorldTangent.xyz );
- vWorldBinormal.xyz = normalize( vWorldBinormal.xyz );
- float4 projPosition = mul( float4( vWorldPosition, 1.0f ), cViewProj );
- projPosition.z = dot( float4( vWorldPosition, 1 ), cViewProjZ );
- o.Position = projPosition;
- o.vFragPos = projPosition.xy;
- o.vBaseCoord = i.vTexCoord0;
- o.vNormal = vWorldNormal;
- o.vViewDir = vWorldPosition - vEyePos;
- o.worldPos_projPosZ = float4( vWorldPosition, projPosition.z );
- //o.lightAtten = float3(1,1,1);
- //o.detailTexCoord_atten3 = float3(0,0,0);
- //o.mvpos = i.vPos;
- o.lightAtten.x = GetVertexAttenForLight( vWorldPosition, 0, true );
- o.lightAtten.y = GetVertexAttenForLight( vWorldPosition, 1, true );
- o.lightAtten.z = GetVertexAttenForLight( vWorldPosition, 2, true );
- o.detailTexCoord_atten3 = float3(0,0,GetVertexAttenForLight( vWorldPosition, 3, true ));
- o.vBinormal = vWorldBinormal;
- o.vTangent = vWorldTangent;
- o.wCameraPosition = vEyePos;
- return o;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement