1 reply to this topic
#1 Members - Reputation: 113
Posted 24 May 2012 - 08:34 PM
Hi, i have problem with the light shader! It is strange and i don't know why. i wrote the light shader, and apply it to the obj mesh, and i run the app at different PC, there are some strange different results: the light keep shinning on and off; or the light become dark; and so on.
why the result of lighting at different pc is different? i really wonder to know!
thanks in advance!
my light shader: ( i use shadermodel 4.0 )
Texture2D colorMap : register( t0 );
SamplerState colorSampler : register( s0 );
cbuffer cbWVP : register( b0 )
{
row_major matrix WVP;
row_major matrix WorldMatrix;
};
struct VS_Input
{
float4 pos : POSITION;
float2 tex0 : TEXCOORD0;
float3 norm : NORMAL;
};
struct PS_Input
{
float4 pos : SV_POSITION;
float2 tex0 : TEXCOORD0;
float3 worldNorm : TEXCOORD1
float3 lightDir : TEXCOORD2;
};
PS_Input VS_Main( VS_Input vertex )
{
PS_Input vsOut = ( PS_Input )0;
float3 worldPos = mul( vertex.pos, WorldMatrix ).xyz;
vsOut.pos = mul(vertex.pos,WVP);
vsOut.tex0 = vertex.tex0;
vsOut.worldNorm = mul( vertex.norm, (float3x3)WorldMatrix );
float3 lightPos = float3(-0.7f,2.0f,2.5f);
vsOut.lightDir = lightPos - worldPos;
return vsOut;
}
float4 PS_Main( PS_Input frag ) : SV_TARGET
{
//texture color
float4 finalTexColor;
finalTexColor = colorMap.Sample(colorSampler,frag.tex0);
//light color
frag.lightDir = normalize(frag.lightDir );
float4 finalLightColor;
float3 ambientColor = float3(0.02f,0.02f,0.02f); //final ambient
float3 lightDiffuse = float3(0.85f,0.8f,0.8f);
float3 lightSpecular = float3(0.4f,0.4f,0.4f);
float SpecularPower = 1.0f;
float fSpecularCosine = saturate(dot(frag.lightDir,frag.worldNorm));
float3 diffuseColor = lightDiffuse * fSpecularCosine; // light final diffuse
float fSpecularLevel = pow(fSpecularCosine,SpecularPower);
float3 specularColor = lightSpecular * fSpecularLevel; // light final specular
finalLightColor.rgb = ambientColor + specularColor + diffuseColor;
finalLightColor.a = 1.0f;
//final color
float4 finalColor;
finalColor = finalTexColor * finalLightColor;
return finalColor;
}
Sponsor:
#2 Members - Reputation: 37
Posted 26 May 2012 - 09:40 AM
Findout GPU of the other PC, if you have ATI and there is Nvidia, there are standard differences between those vendors. One I have experienced is that Nvidia behaves to texture slots differently, and it seems your texture bound to a slot is inproper, as you say that light is off or dark. I would say the texture does not get bound to slot some frames. You have texture on slot t0.






