Jump to content

  • Log In with Google      Sign In   
  • Create Account


light shader in different PC


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 csdcsz   Members   -  Reputation: 113

Like
0Likes
Like

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 JohnnyCode   Members   -  Reputation: 216

Like
0Likes
Like

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.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS