void trollSkinning_One_Weight_vp( float4 position : POSITION, float3 normal : NORMAL, float2 uv : TEXCOORD0, float3 tangent : TANGENT, float4 blendIdx : BLENDINDICES, float4 blendWgt : BLENDWEIGHT, out float4 oPosition : POSITION, out float2 oUv : TEXCOORD0, //out float3 oTangent: TEXCOORD1, //out float3 oBinormal: TEXCOORD2, out float3 oNormal : TEXCOORD3, out float3 V: TEXCOORD4, out float3 L1: TEXCOORD5, out float3 L2: TEXCOORD6, uniform float3x4 worldMatrix3x4Array[69], uniform float4x4 viewProjectionMatrix, uniform float4 lightPos1, uniform float4 lightPos2, uniform float4 cameraPos) { // transform by indexed matrix float4 blendPos = float4(0,0,0,1); blendPos.xyz += mul(worldMatrix3x4Array[blendIdx[0]], position).xyz * blendWgt[0]; blendPos.xyz += mul(worldMatrix3x4Array[blendIdx[1]], position).xyz * blendWgt[1]; // view / projection oPosition = mul(viewProjectionMatrix, blendPos); // transform normal oNormal = mul((float3x3)worldMatrix3x4Array[blendIdx[0]], normal) * blendWgt[0]; oNormal += mul((float3x3)worldMatrix3x4Array[blendIdx[1]], normal) * blendWgt[1]; //oTangent = mul((float3x3)worldMatrix3x4Array[blendIdx], tangent); oNormal = normalize(oNormal); // oTangent = normalize(oTangent); // oBinormal = cross(oTangent, oNormal); // Lighting - support point and directional L1 = lightPos1.xyz - blendPos.xyz * lightPos1.w; L2 = lightPos2.xyz - blendPos.xyz * lightPos2.w; V = cameraPos.xyz - blendPos.xyz; oUv = uv; } void trollSkinning_SMGen_One_Weight_vp( float4 position : POSITION, float4 blendIdx : BLENDINDICES, float4 blendWgt : BLENDWEIGHT, out float4 oPosition : POSITION, out float3 cPos:TEXCOORD0, uniform float3x4 worldMatrix3x4Array[69], uniform float4x4 viewMatrix, uniform float4x4 viewProjectionMatrix) { // transform by indexed matrix float4 blendPos = float4(0,0,0,1); blendPos.xyz += mul(worldMatrix3x4Array[blendIdx[0]], position).xyz * blendWgt[0]; blendPos.xyz += mul(worldMatrix3x4Array[blendIdx[1]], position).xyz * blendWgt[1]; // view / projection cPos = mul(viewMatrix, blendPos).xyz; oPosition = mul(viewProjectionMatrix, blendPos); } struct PS_IN { float4 hPos:POSITION; float2 texCoord:TEXCOORD0; float3 tangent:TEXCOORD1; float3 binormal:TEXCOORD2; float3 normal:TEXCOORD3; float3 V: TEXCOORD4; float3 L1: TEXCOORD5; float3 L2: TEXCOORD6; }; PS_IN FPSArmSkinning_VP(float4 position : POSITION, float3 normal : NORMAL, float3 tangent : TANGENT, float2 uv : TEXCOORD0, float4 blendIdx : BLENDINDICES, float4 blendWgt : BLENDWEIGHT, uniform float3x4 worldMatrix3x4Array[49], uniform float4x4 viewMatrix, uniform float4x4 viewProjectionMatrix, uniform float4 lightPos1, uniform float4 lightPos2, uniform float4 cameraPos) { PS_IN OUT = (PS_IN) 0; // transform by indexed matrix float4 blendPos = float4(0,0,0,1); blendPos.xyz += mul(worldMatrix3x4Array[blendIdx[0]], position).xyz * blendWgt[0]; blendPos.xyz += mul(worldMatrix3x4Array[blendIdx[1]], position).xyz * blendWgt[1]; // view / projection OUT.hPos = mul(viewProjectionMatrix, blendPos); // transform normal OUT.normal = mul((float3x3)worldMatrix3x4Array[blendIdx[0]], normal) * blendWgt[0]; OUT.normal += mul((float3x3)worldMatrix3x4Array[blendIdx[1]], normal) * blendWgt[1]; OUT.tangent = mul((float3x3)worldMatrix3x4Array[blendIdx[0]], tangent) * blendWgt[0]; OUT.tangent += mul((float3x3)worldMatrix3x4Array[blendIdx[1]], tangent) * blendWgt[1]; OUT.normal = normalize(OUT.normal); OUT.tangent = normalize(OUT.tangent); OUT.binormal = cross(OUT.tangent, OUT.normal); // Lighting - support point and directional OUT.L1 = lightPos1.xyz - blendPos.xyz * lightPos1.w; OUT.L2 = lightPos2.xyz - blendPos.xyz * lightPos2.w; OUT.V = cameraPos.xyz - blendPos.xyz; OUT.texCoord = uv; return OUT; } void FPSArmSkinning_SMGen_VP( float4 position : POSITION, float4 blendIdx : BLENDINDICES, float4 blendWgt : BLENDWEIGHT, out float4 oPosition : POSITION, out float3 cPos:TEXCOORD0, uniform float3x4 worldMatrix3x4Array[49], uniform float4x4 viewMatrix, uniform float4x4 viewProjectionMatrix) { // transform by indexed matrix float4 blendPos = float4(0,0,0,1); blendPos.xyz += mul(worldMatrix3x4Array[blendIdx[0]], position).xyz * blendWgt[0]; blendPos.xyz += mul(worldMatrix3x4Array[blendIdx[1]], position).xyz * blendWgt[1]; // view / projection cPos = mul(viewMatrix, blendPos).xyz; oPosition = mul(viewProjectionMatrix, blendPos); }