⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lightmappedgeneric_vs20.fxc

📁 hl2 source code. Do not use it illegal.
💻 FXC
字号:
//	STATIC: "FOG_TYPE"				"0..1"
//	STATIC: "ENVMAP_MASK"			"0..1"
//	STATIC: "TANGENTSPACE"			"0..1"
//  STATIC: "BUMPMAP"				"0..1"
//  STATIC: "VERTEXCOLOR"			"0..1"
//  STATIC: "AACLAMP"  "0..1"

#include "common_vs_fxc.h"

static const int g_FogType					= FOG_TYPE;
static const bool g_UseSeparateEnvmapMask	= ENVMAP_MASK;
static const bool g_bTangentSpace		= TANGENTSPACE;
static const bool g_bBumpmap				= BUMPMAP;
static const bool g_bVertexColor			= VERTEXCOLOR;

const float4 cBaseTexCoordTransform[2]			:  register( c90 );
const float4 cDetailOrBumpTexCoordTransform[2]	:  register( c92 );
// This should be identity if we are bump mapping, otherwise we'll screw up the lightmapTexCoordOffset.
const float4 cEnvmapMaskTexCoordTransform[2]	:  register( c94 );

struct VS_INPUT
{
	float3 vPos							: POSITION;
	float3 vNormal						: NORMAL;
	float2 vBaseTexCoord				: TEXCOORD0;
	float2 vLightmapTexCoord			: TEXCOORD1;
#if AACLAMP
	float4 vLightmapTexCoordOffset_Size : TEXCOORD2;
#else
	float2 vLightmapTexCoordOffset		: TEXCOORD2;
#endif
	float3 vTangentS					: TANGENT;
	float3 vTangentT					: BINORMAL;
	float4 vColor						: COLOR0;
};

struct VS_OUTPUT
{
    float4 projPos					: POSITION;	
	float  fog						: FOG;
	float2 baseTexCoord				: TEXCOORD0;
	// detail textures and bumpmaps are mutually exclusive so that we have enough texcoords.
	float4 detailOrBumpAndEnvmapMaskTexCoord : TEXCOORD1;
	float4 lightmapTexCoord1And2	: TEXCOORD2;
	float2 lightmapTexCoord3		: TEXCOORD3;
	float3 worldVertToEyeVector		: TEXCOORD4;
	float3x3 tangentSpaceTranspose	: TEXCOORD5;	// and 6 and 7
	float4 vertexColor				: COLOR;
};

VS_OUTPUT main( const VS_INPUT v )
{
	VS_OUTPUT o = ( VS_OUTPUT )0;

	float4 projPos;
	float3 worldPos;

	projPos = mul( float4( v.vPos, 1 ), cModelViewProj );
	o.projPos = projPos;

	worldPos = mul( float4( v.vPos, 1 ), cModel[0] );

	float3 worldTangentS = mul( v.vTangentS, ( const float3x3 )cModel[0] );
	float3 worldTangentT = mul( v.vTangentT, ( const float3x3 )cModel[0] );
	float3 worldNormal = mul( v.vNormal, ( float3x3 )cModel[0] );
#ifdef NV3X
	//  NV3X prefers dp3s to mads...
	//  but if bumpmapping isn't used, don't do a vector transpose per-pixel
	if (g_bBumpmap) 
	{
		o.tangentSpaceTranspose[0] = worldTangentS;
		o.tangentSpaceTranspose[1] = worldTangentT;
		o.tangentSpaceTranspose[2] = worldNormal;
	}
	else 
	{
		o.tangentSpaceTranspose[0] = float3( worldTangentS.x, worldTangentT.x, worldNormal.x );
		o.tangentSpaceTranspose[1] = float3( worldTangentS.y, worldTangentT.y, worldNormal.y );
		o.tangentSpaceTranspose[2] = float3( worldTangentS.z, worldTangentT.z, worldNormal.z );	
	}
#else
	o.tangentSpaceTranspose[0] = worldTangentS;
	o.tangentSpaceTranspose[1] = worldTangentT;
	o.tangentSpaceTranspose[2] = worldNormal;
#endif
	o.worldVertToEyeVector = VSHADER_VECT_SCALE * (cEyePos - worldPos);
	o.baseTexCoord.x = dot( v.vBaseTexCoord, cBaseTexCoordTransform[0] );
	o.baseTexCoord.y = dot( v.vBaseTexCoord, cBaseTexCoordTransform[1] );
	o.detailOrBumpAndEnvmapMaskTexCoord.x = dot( v.vBaseTexCoord, cDetailOrBumpTexCoordTransform[0] );
	o.detailOrBumpAndEnvmapMaskTexCoord.y = dot( v.vBaseTexCoord, cDetailOrBumpTexCoordTransform[1] );
	
	//  compute lightmap coordinates
#if AACLAMP
	//  AA-clamping produces the same output for bumped and non-bumped
	o.lightmapTexCoord1And2.xy = v.vLightmapTexCoord;
	o.lightmapTexCoord1And2.wz = v.vLightmapTexCoordOffset_Size.zw;
	o.lightmapTexCoord3.xy = v.vLightmapTexCoordOffset_Size.xy;
#else
	if( g_bBumpmap )
	{
		o.lightmapTexCoord1And2.xy = v.vLightmapTexCoord + v.vLightmapTexCoordOffset;

		float2 lightmapTexCoord2 = o.lightmapTexCoord1And2.xy + v.vLightmapTexCoordOffset;
		float2 lightmapTexCoord3 = lightmapTexCoord2 + v.vLightmapTexCoordOffset;

		// reversed component order
		o.lightmapTexCoord1And2.w = lightmapTexCoord2.x;
		o.lightmapTexCoord1And2.z = lightmapTexCoord2.y;

		o.lightmapTexCoord3.xy = lightmapTexCoord3;
	}
	else
	{
		o.lightmapTexCoord1And2.xy = v.vLightmapTexCoord;
	}
#endif

	if( g_UseSeparateEnvmapMask )
	{
		// reversed component order
		o.detailOrBumpAndEnvmapMaskTexCoord.w = dot( v.vBaseTexCoord, cEnvmapMaskTexCoordTransform[0] );
		o.detailOrBumpAndEnvmapMaskTexCoord.z = dot( v.vBaseTexCoord, cEnvmapMaskTexCoordTransform[1] );
	}

	o.fog = CalcFog( worldPos, projPos, g_FogType );

	if (!g_bVertexColor)
	{
		o.vertexColor = cModulationColor;
	}
	else
	{
		o.vertexColor = v.vColor * cModulationColor;
	}

	return o;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -