DX sprites and stuff I guess

This commit is contained in:
2015-10-19 17:47:58 +02:00
parent 1abee730ec
commit 4a3575190f
6 changed files with 156 additions and 29 deletions
+42 -14
View File
@@ -5,7 +5,11 @@ cbuffer ConstantBuffer
float4x4 ViewMatrix;
float4x4 ProjectionMatrix;
float4x4 InverseTransposeViewModel;
float3 LightPosition;
float4 Color;
float4 LightPositions[10];
float4 LightColors[10];
float LightRadii[10];
uint NumLights;
}
Texture2D Texture;
@@ -27,22 +31,46 @@ struct VOut
float4 BoneWeights2 : BLENDWEIGHT1;
};
float4 phong(float3 lightPos, float lightRadius, float3 lightColor, float3 position, float3 normal, float3 specular, float specularExponent)
{
float3 LightSpecular = float3(1.0f, 1.0f, 1.0f) * 0.5f;
// Diffuse
lightPos = mul(ViewMatrix, float4(lightPos, 1.0f)).xyz;
float3 distanceToLight = lightPos - position;
float3 directionToLight = normalize(distanceToLight);
float dotProd = dot(directionToLight, normal);
float3 Idiffuse = lightColor * dotProd;
// Specular
float3 surfaceToViewer = normalize(-position);
float3 halfWay = normalize(surfaceToViewer + directionToLight);
float dotSpecular = max(dot(halfWay, normal), 0.0f);
float specularFactor = pow(dotSpecular, specularExponent);
float3 Ispecular = specular * LightSpecular * specularFactor;
// Attenuation
float dist = distance(lightPos, position);
float attenuation = pow(max(0.0f, 1.0f - (dist / lightRadius)), 2.0f);
return float4((Idiffuse + Ispecular) * attenuation, 1.0f);
}
float4 main(VOut input) : SV_TARGET
{
float4 ambientLight = float4(1.0f, 1.0f, 1.0f, 1.0f) * 0.1f;
////float4 lightPos = float4(0.0f, -1.0f, 2.0f, 0.0f);
float4 lightColor = float4(1.0f, 1.0f, 1.0f, 1.0f);
//float4 ambientLight = float4(1.0f, 1.0f, 1.0f, 1.0f) * 0.1f;
//float4 lightColor = float4(1.0f, 1.0f, 1.0f, 1.0f);
//float3 lightToPixel = normalize(LightPosition - mul(input.Position, transpose(ModelMatrix)));
//float diffuseBrightness = saturate(dot(lightToPixel, normalize(mul(input.Normal, transpose(ModelMatrix)))));
float4 diffuseTexture = Texture.Sample(samplerState, input.TextureCoord) * Color;
float4 lights = float4(1.f, 1.f, 1.f, 1.f);
float3 lightToPixel = normalize(LightPosition - mul(input.Position, transpose(ModelMatrix)));
for (uint i = 0; i < NumLights; i++) {
float4 light = phong(LightPositions[i], LightRadii[i], LightColors[i].rgb, input.Position, normalize(input.Normal.xyz), float3(1.0f, 1.0f, 1.0f), 1.0f);
lights = lights + light;
}
//float3 lightModelPos = mul(ModelMatrix, LightPosition);
float diffuseBrightness = saturate(dot(lightToPixel, normalize(mul(input.Normal, transpose(ModelMatrix)))));
//input.texcoord.y = 1 - input.texcoord.y;
//return float4(input.normal.xy, 0.0f, 0.0f);
return Texture.Sample(samplerState, input.TextureCoord);
//return float4(input.color.xy, 0.0f, 0.0f);
//return (ambientLight + lightColor * diffuseBrightness) * Texture.Sample(samplerState, input.texcoord);
//return float4(0.0f, 0.0f, 1.0f, 1.0f);
//return float4(1.f, 0.f, 0.f, 1.f);
return float4(diffuseTexture.rgb * 0.8f, diffuseTexture.a) * lights;
}