Skip to main content
GameDev.net gamedev.net
🔒 Locked

light shader in different PC

Started by csdcsz May 25, 2012 at 2:34 AM 0 replies 1.4k views
Original Post
csdcsz
csdcsz


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;
}

JohnnyCode
JohnnyCode
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.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.