PDA

View Full Version : Shader problem:normal and negative scaling



somboon
01-12-2010, 02:38 PM
I try to inverse x axis of my model by calling scalef(-1.0f,1.0f,1.0f);
the vertex position turn out right but the lighting is incorrect.

eg.
when light is on the left side of the x-inverse model the right side of the model become lit.

In my shader I already Multiply gl_Normal with gl_NormalMatrix before lighting calculation.

Please help me this is the first time I encouter this problem (never use scaling before )

Yomboprime
01-12-2010, 03:12 PM
Of course! You have to invert also the x coordinate of the normals :-)

somboon
01-12-2010, 07:48 PM
does this mean invert has to be seperate from scaling term for the lighting to turn out right ?

I thought that gl_NormalMatrix already take care of scaling normal.

somboon
01-13-2010, 12:02 AM
Update:

It look like my two side lighting implementation caused the problem.

In order to implement two side lighting , I have this code in fragment program of deferred shader geomatric pass.

if(gl_FrontFacing == false){
normalizedNormal *= -1.0;
}

but it look like when scaling with negative value, facing of the polygon will also be reverse.

I known this by call glCullFace(GL_BACK) and all the front face of the geometry are culled in stead of the back face.

so I fixed this by adding

if(gl_FrontFacing == false){
normalizedNormal *= -1.0;
}
normalizedNormal *= scaleX;

scaleX is the value taken from localMatrix[0].x (x scaling term)

But I am not sure if this a safe way to fix the problem.

Please someone give me some advice.