• Advertisement
Sign in to follow this  

light shader in different PC

This topic is 2065 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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;

Share this post

Link to post
Share on other sites
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
Sign in to follow this  

  • Advertisement