Sign in to follow this  
csdcsz

light shader in different PC

Recommended Posts

csdcsz    113
[size=4]
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;
}[/size]

Share this post


Link to post
Share on other sites
JohnnyCode    1046
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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this