home *** CD-ROM | disk | FTP | other *** search
- // v2fConnector.HPOS is set to be the homogenous space coordinate
- // v2f.worldTangent is set to be the tangent in world space
- // InverseTransposes not used, as we assume no nonuniform scales.
-
- // vecMul(matrix, float3) multiplies like a vector instead of point (no translate)
- float3 vecMul(const float4x4 matrix, const float3 vec){
- return(float3(dot(vec, matrix._11_12_13),
- dot(vec, matrix._21_22_23),
- dot(vec, matrix._31_32_33)));
- }
-
- struct a2vConnector : application2vertex {
- float4 coord;
- float3 tangent;
- float4 normal;
- float3 color;
- };
-
- struct v2fConnector : vertex2fragment {
- float4 HPOS :HPOS;
- float3 silhouette :TEX0;
- float4 worldEyeDir :TEX1;
- float4 texCoord :TEX2;
- //float3 fakeNorm :TEX3;
- };
-
- v2fConnector main(a2vConnector a2v,
- const uniform float4x4 model,
- const uniform float4x4 viewInv,
- const uniform float4x4 viewProj,
- const uniform float4x4 modelViewProj,
- const uniform float4 hairThikness){
- v2fConnector v2f;
-
- float3 worldTangent = vecMul(model, a2v.tangent);
-
- float4 objectCoord = float4(a2v.coord.x, a2v.coord.y, a2v.coord.z, 1);
-
- float3 worldPos = vecMul(model, objectCoord.xyz);
- float3 worldEyePos = viewInv._14_24_34;
-
- v2f.worldEyeDir.xyz = normalize(worldEyePos - worldPos.xyz);
- float s = 0.5*dot(worldTangent.xyz, v2f.worldEyeDir.xyz);
- float t = s + 1;
- s = -s + 1;
-
- v2f.texCoord = float4(s, t, a2v.color.x, a2v.color.y);
-
- float4 worldPos1 = mul(model, objectCoord);
- v2f.worldEyeDir.xyz = normalize(worldPos1.xyz - worldEyePos);
-
- //float3 binormal = cross(v2f.worldEyeDir.xyz, worldTangent.xyz);
-
- //worldPos1.xyz = worldPos1.xyz + a2v.coord.w*binormal*hairThikness.x;
- //float4 hpos = mul(viewProj, worldPos1);
-
- float3 worldNorm = vecMul(model, a2v.normal.xyz);
-
- float facingRatio = 1-max(dot(worldNorm.xyz, -v2f.worldEyeDir.xyz), 0.001);
-
- facingRatio = facingRatio*facingRatio;
- v2f.silhouette.xyz = facingRatio*facingRatio;
-
- float4 hpos = mul(modelViewProj, objectCoord);
-
- v2f.HPOS = hpos;
-
- return v2f;
- }
-
-
-